diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index b4c5a4296..c8da2b895 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -107,8 +107,9 @@ 5604D4580D603459004F5C5D /* SpotlightPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5604D4570D603459004F5C5D /* SpotlightPanel.xib */; }; 5604D45B0D60349B004F5C5D /* SpotlightWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5604D4590D60349B004F5C5D /* SpotlightWindowController.m */; }; 5604D4F60D60726E004F5C5D /* SpotlightPlaylistEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */; }; - 562EA72E0D60CC5B0017B2B7 /* SpotlightTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 562EA72D0D60CC5B0017B2B7 /* SpotlightTransformers.m */; }; 56462DDA0D61D71E000AB68C /* SpotlightPlaylistView.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */; }; + 56462EAF0D6341F6000AB68C /* SpotlightTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */; }; + 56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462EB10D634206000AB68C /* SpotlightPlaylistController.m */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; @@ -598,9 +599,11 @@ 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightWindowController.h; path = Spotlight/SpotlightWindowController.h; sourceTree = ""; }; 5604D4F40D60726E004F5C5D /* SpotlightPlaylistEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistEntry.h; path = Spotlight/SpotlightPlaylistEntry.h; sourceTree = ""; }; 5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistEntry.m; path = Spotlight/SpotlightPlaylistEntry.m; sourceTree = ""; }; - 562EA72D0D60CC5B0017B2B7 /* SpotlightTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpotlightTransformers.m; sourceTree = ""; }; 56462DD80D61D71E000AB68C /* SpotlightPlaylistView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistView.h; path = Spotlight/SpotlightPlaylistView.h; sourceTree = ""; }; 56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistView.m; path = Spotlight/SpotlightPlaylistView.m; sourceTree = ""; }; + 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightTransformers.m; path = Spotlight/SpotlightTransformers.m; sourceTree = ""; }; + 56462EB00D634206000AB68C /* SpotlightPlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistController.h; path = Spotlight/SpotlightPlaylistController.h; sourceTree = ""; }; + 56462EB10D634206000AB68C /* SpotlightPlaylistController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistController.m; path = Spotlight/SpotlightPlaylistController.m; sourceTree = ""; }; 566D32160D538550004466A5 /* APL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = APL.xcodeproj; path = Plugins/APL/APL.xcodeproj; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8E07AAEE0AAC910500A4B32F /* SS_PreferencePaneProtocol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SS_PreferencePaneProtocol.h; path = Preferences/SS_PreferencePaneProtocol.h; sourceTree = ""; }; @@ -1090,13 +1093,15 @@ 569C52C50D5F2BD500BDBDC9 /* Spotlight */ = { isa = PBXGroup; children = ( + 56462EB00D634206000AB68C /* SpotlightPlaylistController.h */, + 56462EB10D634206000AB68C /* SpotlightPlaylistController.m */, + 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */, 5604D4590D60349B004F5C5D /* SpotlightWindowController.m */, 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */, 5604D4510D603430004F5C5D /* SpotlightSearchController.m */, 5604D4520D603430004F5C5D /* SpotlightSearchController.h */, 5604D4F40D60726E004F5C5D /* SpotlightPlaylistEntry.h */, 5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */, - 562EA72D0D60CC5B0017B2B7 /* SpotlightTransformers.m */, 56462DD80D61D71E000AB68C /* SpotlightPlaylistView.h */, 56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */, ); @@ -1636,8 +1641,9 @@ 5604D4550D603430004F5C5D /* SpotlightSearchController.m in Sources */, 5604D45B0D60349B004F5C5D /* SpotlightWindowController.m in Sources */, 5604D4F60D60726E004F5C5D /* SpotlightPlaylistEntry.m in Sources */, - 562EA72E0D60CC5B0017B2B7 /* SpotlightTransformers.m in Sources */, 56462DDA0D61D71E000AB68C /* SpotlightPlaylistView.m in Sources */, + 56462EAF0D6341F6000AB68C /* SpotlightTransformers.m in Sources */, + 56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib index 9dfd601aa..e0a232ffd 100644 --- a/Spotlight/SpotlightPanel.xib +++ b/Spotlight/SpotlightPanel.xib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -51,7 +51,7 @@ 134217728 Add to Playlist - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -108,13 +108,13 @@ 0 Artist - + 1.100000e+01 3100 6 - System + System headerColor 3 @@ -123,7 +123,7 @@ 6 - + headerTextColor 3 @@ -134,12 +134,12 @@ 337772096 2048 - Text Cell + Text Cell 6 - + controlBackgroundColor 3 @@ -148,7 +148,7 @@ 6 - + controlTextColor @@ -173,7 +173,7 @@ 337772096 2048 - + @@ -202,7 +202,7 @@ 337772096 2048 - + @@ -228,7 +228,7 @@ 337772096 67110912 - + @@ -254,7 +254,7 @@ 337772096 67110912 - + @@ -280,7 +280,7 @@ 337772096 2048 - + @@ -306,7 +306,7 @@ 337772096 67110912 - + @@ -322,7 +322,7 @@ 6 - + gridColor 3 @@ -413,7 +413,7 @@ 1 6 - + textBackgroundColor @@ -478,7 +478,7 @@ 6 - + controlColor @@ -541,7 +541,7 @@ YES - SpotlightSearchController + SpotlightSearchController YES @@ -800,12 +800,28 @@ - tableView + tableView 149 + + + spotlightSearchController + + + + 150 + + + + dataSource + + + + 151 + @@ -1141,11 +1157,11 @@ - {{70, 17}, {480, 318}} + {{70, 17}, {480, 318}} {196, 240} - {{70, 17}, {480, 318}} - PlaylistController + + SpotlightPlaylistController @@ -1218,52 +1234,14 @@ - 149 + 151 YES - PlaylistView - NSTableView - - YES - - YES - scrollToCurrentEntry: - shufflePlaylist: - sortByPath: - toggleColumn: - - - YES - id - - - - - - - YES - - YES - playbackController - playlistController - - - YES - PlaybackController - PlaylistController - - - - IBProjectSource - Playlist/PlaylistView.h - - - - EntriesController - NSObject + SpotlightPlaylistController + PlaylistController YES @@ -1274,17 +1252,12 @@ - YES - - YES - - - YES - + spotlightSearchController + SpotlightSearchController - - Playlist/EntriesController.h + IBProjectSource + Spotlight/SpotlightPlaylistController.h @@ -1304,12 +1277,325 @@ PlaylistLoader - + Spotlight/SpotlightWindowController.h - + PlaybackController + NSObject + + YES + + YES + changeVolume: + next: + pause: + pauseResume: + play: + playPauseResume: + playbackButtonClick: + prev: + resume: + seek: + seekBackward: + seekForward: + stop: + toggleShowTimeRemaining: + volumeDown: + volumeUp: + + + YES + id + + + + + + + + + + + + + + + + + + + YES + + YES + outputDevices + playbackButtons + playlistController + playlistView + positionSlider + timeField + volumeSlider + + + YES + NSArrayController + NSSegmentedControl + PlaylistController + PlaylistView + TrackingSlider + NSTextField + NSSlider + + + + + Application/PlaybackController.h + + + + PlaylistView + NSTableView + + YES + + YES + scrollToCurrentEntry: + shufflePlaylist: + sortByPath: + toggleColumn: + + + YES + + + + + + + + YES + + YES + playbackController + playlistController + + + YES + PlaybackController + PlaylistController + + + + + Playlist/PlaylistView.h + + + + EntriesController + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + Playlist/EntriesController.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKMainThreadProxy.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKFileWatcher.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/NDHotKeys/NDHotKeyEvent.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKKQueue.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/AppleRemote/AppleRemote.h + + + + DNDArrayController + NSArrayController + + YES + + YES + + + YES + + + + tableView + NSTableView + + + + Playlist/DNDArrayController.h + + + + YES @@ -1346,8 +1632,8 @@ YES - - + + @@ -1366,31 +1652,10 @@ - + Spotlight/SpotlightSearchController.h - - PlaylistLoader - - - YES - - YES - - - YES - - - - playlistController - PlaylistController - - - - Playlist/PlaylistLoader.h - - SpotlightPlaylistView PlaylistView @@ -1413,80 +1678,69 @@ - + Spotlight/SpotlightPlaylistView.h - PlaybackController + PlaylistLoader + + YES + + YES + + + YES + + + + playlistController + PlaylistController + + + + Playlist/PlaylistLoader.h + + + + PlaylistController + DNDArrayController YES YES - changeVolume: - next: - pause: - pauseResume: - play: - playPauseResume: - playbackButtonClick: - prev: - resume: - seek: - seekBackward: - seekForward: - stop: - toggleShowTimeRemaining: - volumeDown: - volumeUp: + clear: + clearFilterPredicate: + showEntryInFinder: + takeRepeatFromObject: + takeShuffleFromObject: YES - - - - - - - - - - - - - - - - + + + + + YES YES - outputDevices - playbackButtons - playlistController - playlistView - positionSlider - timeField - volumeSlider + entriesController + playlistLoader YES - NSArrayController - NSSegmentedControl - PlaylistController - PlaylistView - TrackingSlider - NSTextField - NSSlider + EntriesController + PlaylistLoader - - Application/PlaybackController.h + + Playlist/PlaylistController.h @@ -1511,227 +1765,10 @@ - + Utils/TrackingSlider.h - - DNDArrayController - NSArrayController - - YES - - YES - - - YES - - - - - NSTableView - - - - Playlist/DNDArrayController.h - - - - PlaylistController - DNDArrayController - - YES - - YES - clear: - clearFilterPredicate: - showEntryInFinder: - takeRepeatFromObject: - takeShuffleFromObject: - - - YES - - - - - - - - - YES - - YES - entriesController - playlistLoader - - - YES - EntriesController - PlaylistLoader - - - - - Playlist/PlaylistController.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/NDHotKeys/NDHotKeyEvent.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/UKKQueue/UKKQueue.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/AppleRemote/AppleRemote.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/UKKQueue/UKFileWatcher.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/UKKQueue/UKMainThreadProxy.h - - 0 @@ -1739,252 +1776,255 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBSQALAAwAMQA1ADYAPAA9 +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBTwALAAwAMQA1ADYAPAA9 AEIAVgBXAFgAWQALAGcAbwB7AHwAlACVAJ0AngChAKIApgCsAMQAzADaAN4BBAEFAQYBBwEOARkBGgEd ASQBJQEoATIBRQFGAU0BTgFTAV0BXgFfAWMBZQFqAWsBbgFyAXsBfAGBAYIBhQGKAYsBjQGQAZkBmgGg AaEBqAGxAbIBuQG6Ab0BxAHNAc4B1QHWAd4B5wHoAe4B7wH2Af0B/gIEAgUCDAIVAhYCHAIdAiQCKAIt Ai4CMQIyAjUCNgI5AkUCRgJHAkoCUwJUARkCWAJZAlwCZQJmAngCfQJ+AokCigKLApQClQKZAqICowKk -APcCpQKpAqoCrQKxAroCuwLEAsUCygLLAs0C1wLcAt0C3gLiAuMC7gLxAvQC9wALAvgC+gL7Av4DEwMb -Ax4DHwMgAyQDKQMqAy8DMAM1AzYDOwM8Az8DRANaA1sDXANnA2gDagNsA20DcgNzA3gDeQOFA4YDhwOI -A44DjwORA5QDnAOdA54DpAOrA6wDrQOuA7UDtgO3A78DwAPBA8cDzwPQA9ED1wPfA+AD4QPnA+8D8APx -A/cD/wQDBAcECAQJBA8EEAQRBBkEGgQbBCEERQRIBEkESwRvBJQEuQS6BLsEvAS9BL4EvwTABMEEwgTD -BMQExQTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNYE1wTYBNkE2gTbBOAE5QUcBVMFVAVV -BVYFVwVYBVkFWgCLBVsFXAVdBV4FXwVgBWEFYgVjBWQFZQVmAFMFZwVoAoIFaQVqBWsFbAVtBW4FbwVw -BXEFcgFaBXMFdAV1BXYFdwV4BXkFegV7BXwFfQBUBX4FfwWABYEFhAWHBYpVJG51bGzfEBIADQAOAA8A -EAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0A -LgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nl -c3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5T -Q2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVj -dG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05T -QWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEBSIDlgQEPgQFHgJqA -6oAFgQEOgQEQgOuBAUWAAIAGgOmBAUYQl4EBEdIADgAyADMANFtOU0NsYXNzTmFtZYAEgANfEBlTcG90 -bGlnaHRXaW5kb3dDb250cm9sbGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoAO15OU0N1 -c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2JqZWN0c4CP -oQBBgAfaAEMADgBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAK1xOU1dpbmRvd1ZpZXdc -TlNTY3JlZW5SZWN0XU5TV2luZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xhc3NcTlNXaW5kb3dS -ZWN0XxAPTlNXaW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tbTlNWaWV3Q2xhc3OAC4CZgJiA -CRIgAAAAgAqACBACEB+AAF8QGHt7MTk2LCAxOTJ9LCB7NDgwLCAzMTh9fV8QE09wZW4gZnJvbSBTcG90 -bGlnaHRXTlNQYW5lbNcAWgAOAFsAXABdAF4AXwBgAGEAYgBjAGQAYABmXxAPTlNOZXh0UmVzcG9uZGVy -Wk5TU3Vidmlld3NYTlN2RmxhZ3NbTlNGcmFtZVNpemVYTlNXaW5kb3dbTlNTdXBlcnZpZXeADICXgA0R -AQCAlYAMgJbSAA4APgBoAGmAXqUAagBrAGwAbQBugA6AGIBwgISAi9gAWgAOAHAAcQBcAHIAXgBfAEwA -dAB1AHYAdwB4AGAATFdOU0ZyYW1lVk5TQ2VsbFlOU0VuYWJsZWSAC4AXgA+AEBEBCQmADIALXxAXe3sz -MzUsIDI3Mn0sIHsxMzEsIDMyfX3cAH0ADgB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACKAI4A -jwBqAJEAkgCTW05TQ2VsbEZsYWdzXxATTlNBbHRlcm5hdGVDb250ZW50c18QEk5TUGVyaW9kaWNJbnRl -cnZhbF5OU0J1dHRvbkZsYWdzMl8QD05TS2V5RXF1aXZhbGVudFpOU0NvbnRlbnRzWU5TU3VwcG9ydF1O -U0NvbnRyb2xWaWV3XxAPTlNQZXJpb2RpY0RlbGF5XE5TQ2VsbEZsYWdzMl1OU0J1dHRvbkZsYWdzEgQB -/gCAFoAVEBkQgYAVgBGAEoAOEMgSCAAAABP/////hoJA/18QD0FkZCB0byBQbGF5bGlzdNQADgCWAJcA -mACZAJoAmwCcVk5TU2l6ZVZOU05hbWVYTlNmRmxhZ3OAFCNAKgAAAAAAAIATEQQUXEx1Y2lkYUdyYW5k -ZdIANwA4AJ8AoKIAoAA7Vk5TRm9udFDSADcAOACjAKSkAKQApQBxADtcTlNCdXR0b25DZWxsXE5TQWN0 -aW9uQ2VsbNIANwA4AKcAqKUAqACpAKoAqwA7WE5TQnV0dG9uWU5TQ29udHJvbFZOU1ZpZXdbTlNSZXNw -b25kZXLfEA8AWgCtAA4AcACuAK8AsABbALEAXABeAF8AsgCzALQATAC2ALcAuAC5ALoAuwC8AL0AvgBg -AEwAwQDCAMJbTlNIU2Nyb2xsZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNIZWFkZXJDbGlwVmll -d1xOU1Njcm9sbEFtdHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAuAaoBv -gG4RAjCAJIAhgBlPEBAAAAAAAAAAAEGYAABBmAAAEQESgAyAC4BmgBqAGtIADgA+AGgAxoBepQDCAMEA -tgC7ALqAGoBmgGqAIYAk2wBaAA4AcADNAFsAXADOAF4AzwBfALMAawDRANIAUwDTANQA1QBgANcAawDV -WU5TY3ZGbGFnc1lOU0RvY1ZpZXdZTlNCR0NvbG9ygBiAZYBkgBsRCQCAHIAMgDiAGIAc0gAOAD4AaADc -gF6hANWAHN8QFwBaAN8ADgDgAOEA4gDjAOQArwDlAOYA5wBcAF0AcgDoAF4AMgDpAOoAXwDrAOwAwgDu -AO8A8ADxAPIA1wB4ALoA9gD3APgA+QD6AHgA/ABgAP4A/wEAAMIBAgEDXxAfTlNEcmFnZ2luZ1NvdXJj -ZU1hc2tGb3JOb25Mb2NhbFlOU1R2RmxhZ3NfEBNOU09yaWdpbmFsQ2xhc3NOYW1lXE5TSGVhZGVyVmll -d18QEU5TQmFja2dyb3VuZENvbG9yXxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJbnRlcmNlbGxTcGFj -aW5nV2lkdGhfEBlOU0NvbHVtbkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFjaW5nSGVp -Z2h0Xk5TQXV0b3NhdmVOYW1lW05TR3JpZENvbG9yXxAcTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JMb2Nh -bF5OU1RhYmxlQ29sdW1uc1tOU1Jvd0hlaWdodIAaEACAYxP/////28CAAIAegCCAOAmAJCNACAAAAAAA -ABABI0AAAAAAAAAAERESgB8JgGKADIAdgF8QD4AagCcjQDEAAAAAAABfEBVTcG90bGlnaHRQbGF5bGlz -dFZpZXdbTlNUYWJsZVZpZXdaezQ0MCwgMTk4fdcAWgAOAFwAXQBeAF8BBQC7AQkAYwEKAGAAuwDVgCGA -I4AigAyAIYAc2wBaAA4AzQBbAFwAXQDOAF4AzwBfALMAawDRAREBEgDUARMA8gBgANcAawDygBiAZRAE -gGyAbYAggAyAOIAYgCBZezQ0MCwgMTd90gA3ADgBGwEcpAEcAKoAqwA7XxARTlNUYWJsZUhlYWRlclZp -ZXfWAFoADgBwAFwAXgBfAGsBHwEgASEAYABrgBiAJoAlE/////+AAAEAgAyAGF8QFHt7LTI2LCAwfSwg -ezE2LCAxN3190gA3ADgBJgEnpAEnAKoAqwA7XV9OU0Nvcm5lclZpZXfSAA4APgBoASqAXqcBKwEsAS0B -LgEvATABMYAogD+ARIBKgE+AVIBZ2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgBPAE9AT4BPwFAAUEBQgFD -ANVeTlNJc1Jlc2l6ZWFibGVcTlNIZWFkZXJDZWxsXE5TSWRlbnRpZmllcldOU1dpZHRoWk5TRGF0YUNl -bGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdpZHRoCYA+gCqAKSNAUYAAAAAAAIA2EAMj -QEIAAAAAAAAjQI9AAAAAAACAHFZhcnRpc3TXAH0ADgDjAIIAgwCGAUcAiAFIAUkBSgFLAO4BTFtOU1Rl -eHRDb2xvcoA1gC2AK4AsgDJWQXJ0aXN01AAOAJYAlwCYAJkBUACbAVKAFCNAJgAAAAAAAIATEQwc1QAO -AVQBVQFWAVcBWAFZAVoBWwFcV05TQ29sb3JcTlNDb2xvclNwYWNlW05TQ29sb3JOYW1lXU5TQ2F0YWxv -Z05hbWWAMYAwEAaAL4AuVlN5c3RlbVtoZWFkZXJDb2xvctMADgFVAWABWAFBAWJXTlNXaGl0ZYAxQjEA -0gA3ADgBZAFUogFUADvVAA4BVAFVAVYBVwFYAWcBWgFoAVyAMYA0gDOALl8QD2hlYWRlclRleHRDb2xv -ctMADgFVAWABWAFBAW2AMUIwANIANwA4AW8BcKUBcAFxAKUAcQA7XxARTlNUYWJsZUhlYWRlckNlbGxf -EA9OU1RleHRGaWVsZENlbGzYAH0ADgDjAIIAgwCEAIYBRwFzAXQA1wF2AI8A1QF5AXoSFCH+QIA9gDiA -N4ASgBwRCACAO1lUZXh0IENlbGzVAA4BVAFVAVYBVwFYAX4BWgF/AVyAMYA6gDmALl8QFmNvbnRyb2xC -YWNrZ3JvdW5kQ29sb3LTAA4BVQFgAVgBQQGEgDFLMC42NjY2NjY2OQDVAA4BVAFVAVYBVwFYAWcBWgGI -AVyAMYA0gDyALl8QEGNvbnRyb2xUZXh0Q29sb3LSADcAOAGMAXGkAXEApQBxADvSADcAOAGOAY+iAY8A -O11OU1RhYmxlQ29sdW1u2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgBPAGTAZQBlQGWAUEBlwFDANUJgD6A -QYBAI0BSQAAAAAAAgEMjQEOAAAAAAACAHFVhbGJ1bdcAfQAOAOMAggCDAIYBRwCIAUgBSQGdAUsA7gFM -gDWALYBCgCyAMlVBbGJ1bdgAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAXkBeoA9gDiAN4ASgByA -O9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwBqwGsAa0BrgFBAa8BQwDVCYA+gEaARSNAUsAAAAAAAIBJ -I0BEgAAAAAAAgBxVdGl0bGXXAH0ADgDjAIIAgwCGAUcBswFIAbUBtgFLAO4BTBIEgf4AgDWASIBHgCyA -MlVUaXRsZdMADgFVAWABWAFBAbyAMUswLjMzMzMzMjk5ANgAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYA -jwDVAXkBeoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwBxwHIAckBygFBAcsBQwDV -CYA+gEyASyNAUqewAAAAAIBOI0BET2AgAAAAgBxWbGVuZ3Ro1wB9AA4A4wCCAIMAhgFHAIgBSAFJAdEB -SwHTAUyANYAtgE2ALBIEAAAAgDJWTGVuZ3Ro2AB9AA4A4wCCAIMAhACGAUcBcwF0ANcBdgCPANUB3AF6 -gD2AOIA3gBKAHBIEAAgAgDvaATMADgE0ATUBNgE3ATgBOQE6AQUAeAE8AeEB4gHjAeQBQQHlAUMA1QmA -PoBRgFAjQEYAAAAAAACAUyNAJAAAAAAAAIAcVHllYXLXAH0ADgDjAIIAgwCGAUcAiAFIAUkB6wFLAdMB -TIA1gC2AUoAsgDJUWWVhctgAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAdwBeoA9gDiAN4ASgByA -O9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwB+QH6AeMB+wFBAeUBQwDVCYA+gFaAVYBYgBxVZ2VucmXX -AH0ADgDjAIIAgwCGAUcAiAFIAUkCAQFLAO4BTIA1gC2AV4AsgDJVR2VucmXYAH0ADgDjAIIAgwCEAIYB -RwFzAXQA1wF2AI8A1QF5AXqAPYA4gDeAEoAcgDvaATMADgE0ATUBNgE3ATgBOQE6AQUAeAE8Ag8CEAIR -AhIBQQITAUMA1QmAPoBbgFojQEMAAAAAAACAXSNAEAAAAAAAAIAcVXRyYWNr1wB9AA4A4wCCAIMAhgFH -AIgBSAFJAhkBSwHTAUyANYAtgFyALIAyVVRyYWNr2AB9AA4A4wCCAIMAhACGAUcBcwF0ANcBdgCPANUB -3AF6gD2AOIA3gBKAHIA70gA3ADgCJQImowImAicAO15OU011dGFibGVBcnJheVdOU0FycmF51QAOAVQB -VQFWAVcBWAIqAVoCKwFcgDGAYYBggC5ZZ3JpZENvbG9y0wAOAVUBYAFYAUECMIAxRDAuNQBfEBRDb2dT -cG90bGlnaHRQbGF5bGlzdNIANwA4AjMCNKICNAA7Xk5TQ2xhc3NTd2FwcGVyXxAVe3swLCAxN30sIHs0 -NDAsIDE5OH190gA3ADgCNwI4pAI4AKoAqwA7Wk5TQ2xpcFZpZXfZAFoCOgAOAHAAXABeAjsAXwI8AGsA -awI/AkABIQBgAkIAawJEWE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVyY2VudIAYgBiAaYBngAyAaIAYIz/q -N4SgAAAAXxAUe3s4NSwgMTd9LCB7MTUsIDY4fX1cX2RvU2Nyb2xsZXI60gA3ADgCSAJJpQJJAKkAqgCr -ADtaTlNTY3JvbGxlctoAWgI6AA4AcACuAFwAXgI7AF8CPABrAGsCPwJOAPcBIQBgAkIAawJSgBiAGIBp -gGuADIBogBgjP+oGoAAAAABfEBV7ezAsIDIwMH0sIHs0NDAsIDE1fX3SAA4APgBoAlaAXqEA8oAgXxAW -e3syMCwgNDV9LCB7NDQwLCAyMTV9fdIANwA4AloCW6QCWwCqAKsAO1xOU1Njcm9sbFZpZXfYAFoADgBw -AHEAXAByAF4AXwBMAl4CXwJgAmEAeABgAEyAC4CDgHGAchEBCgmADIALXxAWe3syMCwgMjc4fSwgezMx -MywgMjJ9fd0AfQAOAmcA4wCCAIMAhACGAmgCaQJqAmsBRwJsAm0CbgJvAIoAjwBsAnMA9wB4AnUCdgF6 -XxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHlsZV8QEU5TRHJhd3NCYWNrZ3JvdW5k -XxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50cxIUcf5AgIKAeIBzgBWAEoBwEhAA -BAAJgHUQ/4A71QAOAVQBVQFWAVcBWAFZAVoCewFcgDGAMIB0gC5fEBN0ZXh0QmFja2dyb3VuZENvbG9y -3AI6AH0ADgB/AIAAgQCCAIQAhQCGAjsAhwJgAoAAiQKCAO4AigKEAGwChgDuAocCiIByEgAB/gCAFhBL -gBWAdoBwEQGQgHcSCERA/1ZzZWFyY2hfEBNfc2VhcmNoRmllbGRTZWFyY2g63QI6AH0ADgB/AIAAgQKM -AIIAhACFAIYCOwCHAmACgACJAoIA7gCKApACkQBsAoYA7gKTAohfECNOU0FjY2Vzc2liaWxpdHlPdmVy -cmlkZGVuQXR0cmlidXRlc4BygBaAFYB6gHmAcICBVWNsZWFy0gAOAD4AaAKXgF6hApiAe9MADgKaAD4C -mwKcAp9XTlMua2V5c4CAogKdAp6AfIB9ogKgAqGAfoB/XUFYRGVzY3JpcHRpb25fEClOU0FjY2Vzc2li -aWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzSADcAOAKmAqejAqcCqAA7XxATTlNN -dXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNoRmllbGRDYW5jZWw60gA3ADgCqwKs -pQKsAXEApQBxADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4Aq4Cr6YCrwKwAKkAqgCrADtdTlNTZWFy -Y2hGaWVsZFtOU1RleHRGaWVsZNgAWgAOAHAAcQBcAHIAXgBfAEwCswK0ArUCtgB4AGAATIALgIqAhYCG -EQEhCYAMgAtfEBR7ezg4LCAyMH0sIHs5NiwgMTd9fdgAfQAOAOMAggCDAIQAhgFHArwBdAK+Ar8AjwBt -AsIBehIEAf5AgD2AiICHgBKAhBIQQAQAgDtcU2VhcmNoIFBhdGg61QAOAVQBVQFWAVcBWAF+AVoCyAFc -gDGAOoCJgC5cY29udHJvbENvbG9y0gA3ADgCzAKwpQKwAKkAqgCrADvZAFoADgBwAHECzgBcAHIAXgBf -AEwC0ALRAtIC0wK2AHgAYABMW05TRHJhZ1R5cGVzgAuAlICQgJGAjAmADIAL0gAOAD4APwLZgI+iAtoC -24CNgI5fEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNGaWxlbmFtZXNQYm9hcmRUeXBl0gA3 -ADgC3wLgowLgAuEAO1xOU011dGFibGVTZXRVTlNTZXRfEBZ7ezE4OSwgMTV9LCB7MjcxLCAyNn192ALk -AH0ADgCDAIQAhgLlAuYAUwLnAugAjwBuAusC7ABuW05TUGF0aFN0eWxlXxAUTlNQYXRoQ29tcG9uZW50 -Q2VsbHNaTlNEZWxlZ2F0ZRIUIf4BgJOAEoCLEYAAgJKAi9IADgA+AGgC8IBeoNIANwA4AvIC86QC8wCl -AHEAO1pOU1BhdGhDZWxs0gA3ADgC9QL2pQL2AKkAqgCrADtdTlNQYXRoQ29udHJvbFp7NDgwLCAzMTh9 -0gA3ADgC+QCqowCqAKsAO18QFXt7MCwgMH0sIHsxMjgwLCA3Nzh9fdIANwA4AvwC/aIC/QA7XxAQTlNX -aW5kb3dUZW1wbGF0ZdIADgA+AGgDAIBerxASAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxAD -EQMSgJuAoICigKSApoCpgLKAtIC2gL6AwoDGgMmAzYDRgNWA2YDh1AAOAxQDFQMWAxcAbgMZAxpdTlNE -ZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xhYmVsgJ+Ai4CcgJ7SAA4AMgAzAx2ABICdXxAZU3BvdGxpZ2h0 -U2VhcmNoQ29udHJvbGxlcltwYXRoQ29udHJvbNIANwA4AyEDIqMDIgMjADtfEBROU05pYk91dGxldENv -bm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgMUAxUDFgMXAGwAQQMogJ+AcIAHgKFfEBVpbml0aWFsRmly -c3RSZXNwb25kZXLUAA4DFAMVAxYDFwBBAB8DLoCfgAeAAoCjVndpbmRvd9QADgMUAxUDFgMXAB8DGQM0 -gJ+AAoCcgKVfEBlzcG90bGlnaHRXaW5kb3dDb250cm9sbGVy1AAOAxQDFQMWAzcDGQBqAzqAqICcgA6A -p15hZGRUb1BsYXlsaXN0OtIANwA4Az0DPqMDPgMjADtfEBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4D -FAMVAxYDFwDVA0IDQ4CfgByAqoCx3ANFAA4DRgDhA0cDSANJA0oDSwAyA0wDTQB4AO8AeANRAHgDUwNU -A1UAeANXAHgAeF8QGk5TRmlsdGVyUmVzdHJpY3RzSW5zZXJ0aW9uXxAUTlNQcmVzZXJ2ZXNTZWxlY3Rp -b25aTlNFZGl0YWJsZV8QD19OU01hbmFnZWRQcm94eV8QEU5TT2JqZWN0Q2xhc3NOYW1lXk5TRGVjbGFy -ZWRLZXlzXxAiTlNDbGVhcnNGaWx0ZXJQcmVkaWNhdGVPbkluc2VydGlvbl8QGE5TU2VsZWN0c0luc2Vy -dGVkT2JqZWN0c18QFk5TQXZvaWRzRW1wdHlTZWxlY3Rpb24JgGMJgKwJgK+AroCtCYCrCQlfEBJQbGF5 -bGlzdENvbnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlctIADgA+AGgDXoBeqAG2AawB4gE+AZQB+gHI -AhCAR4BFgFCAKYBAgFWAS4BaXVBsYXlsaXN0RW50cnnRAA4DaYCw0gA3ADgDawNIogNIADtZdGFibGVW -aWV31AAOAxQDFQMWAxcDQgMZA3GAn4CqgJyAs18QEnBsYXlsaXN0Q29udHJvbGxlctQADgMUAxUDFgM3 -AxkAbgN3gKiAnICLgLVfEBFjaGFuZ2VTZWFyY2hQYXRoOtgADgMUA3oDewMVAxYDfAN9A34DQgOAA4EB -KwODA4QAU1lOU0tleVBhdGhZTlNCaW5kaW5nWU5TT3B0aW9uc18QHE5TTmliQmluZGluZ0Nvbm5lY3Rv -clZlcnNpb26AvYCqgLmAuIAogLeAul8QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMuYXJ0aXN0VXZhbHVl -XxAWYXJyYW5nZWRPYmplY3RzLmFydGlzdNMADgKaAD4DiQOKA4yAvKEDi4C7oQKhgH9fEBtOU0NvbmRp -dGlvbmFsbHlTZXRzRWRpdGFibGXSADcAOAOQAqiiAqgAO9IANwA4A5IDk6MDkwMjADtfEBVOU05pYkJp -bmRpbmdDb25uZWN0b3LYAA4DFAN6A3sDFQMWA3wDfQN+A0IDlwOBATADmgObAFOAvYCqgMCAuIBUgL+A -wV8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuZ2VucmVfEBVhcnJhbmdlZE9iamVjdHMuZ2VucmXTAA4C -mgA+A4kDoAOigLyhA4uAu6ECoYB/1wAOAxQDegN7AxUDFgN9A34DGQOnA6gDQgOqAFOAvYCcgMWAxICq -gMNfEBtjb250ZW50QXJyYXk6IHF1ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPX -AA4DFAN6A3sDFQMWA30DfgMZA7EDgQJgA7QAU4C9gJyAyIC4gHKAx18QE3ZhbHVlOiBzZWFyY2hTdHJp -bmdcc2VhcmNoU3RyaW5n2AAOAxQDegN7AxUDFgN8A30DfgNCA7oDgQExA70DvgBTgL2AqoDLgLiAWYDK -gMxfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnRyYWNrXxAVYXJyYW5nZWRPYmplY3RzLnRyYWNr0wAO -ApoAPgOJA8MDxYC8oQOLgLuhAqGAf9gADgMUA3oDewMVAxYDfAN9A34DQgPKA4EBLwPNA84AU4C9gKqA -z4C4gE+AzoDQXxAbdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy55ZWFyXxAUYXJyYW5nZWRPYmplY3RzLnll -YXLTAA4CmgA+A4kD0wPVgLyhA4uAu6ECoYB/2AAOAxQDegN7AxUDFgN8A30DfgNCA9oDgQEsA90D3gBT -gL2AqoDTgLiAP4DSgNRfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmFsYnVtXxAVYXJyYW5nZWRPYmpl -Y3RzLmFsYnVt0wAOApoAPgOJA+MD5YC8oQOLgLuhAqGAf9gADgMUA3oDewMVAxYDfAN9A34DQgPqA4EB -LQPtA+4AU4C9gKqA14C4gESA1oDYXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50aXRsZV8QFWFycmFu -Z2VkT2JqZWN0cy50aXRsZdMADgKaAD4DiQPzA/WAvKEDi4C7oQKhgH/YAA4DFAN6A3sDFQMWA3wDfQN+ -A/kD+gOBAG4D/QP+AFOAvYDagN2AuICLgNyA3tIADgQABAEAeF8QEE5TU2hhcmVkSW5zdGFuY2WA2wnS -ADcAOAQEBAWjBAUEBgA7XxAYTlNVc2VyRGVmYXVsdHNDb250cm9sbGVyXE5TQ29udHJvbGxlcl8QIXZh -bHVlOiB2YWx1ZXMuc3BvdGxpZ2h0U2VhcmNoUGF0aF8QGnZhbHVlcy5zcG90bGlnaHRTZWFyY2hQYXRo -0wAOApoAPgOJBAsEDYC8oQQMgN+hBA6A4F8QFk5TVmFsdWVUcmFuc2Zvcm1lck5hbWVfEBZTdHJpbmdU -b1VSTFRyYW5zZm9ybWVy2AAOAxQDegN7AxUDFgN8A30DfgNCBBQDgQEuBBcEGABTgL2AqoDjgLiASoDi -gORfEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmxlbmd0aF8QFmFycmFuZ2VkT2JqZWN0cy5sZW5ndGjT -AA4CmgA+A4kEHQQfgLyhA4uAu6ECoYB/0gAOAD4EIgQjgOivECEAbgEwAMEAawEuAS0A8gExAHYB+wHk -AGoDQgBBALYAbQDVArUATAErAxkCYALSA/kBQAEsAS8BlgRAAhIAbAHKAa6Ai4BUgGaAGIBKgESAIIBZ -gBCAWIBTgA6AqoAHgGqAhIAcgIaAC4AogJyAcoCRgNqANoA/gE+AQ4DmgF2AcIBOgEnSAA4AMgAzBEeA -BIDnXU5TQXBwbGljYXRpb27SADcAOARKAieiAicAO9IADgA+BCIETYDorxAhAEwA1QBrAEwA1QDVAGsA -1QBqATABLwBMAB8AHwBrAEwAawBtAEEA1QAfAGwAbgAfASsA1QDVASwAHwExAEwBLgEtgAuAHIAYgAuA -HIAcgBiAHIAOgFSAT4ALgAKAAoAYgAuAGICEgAeAHIACgHCAi4ACgCiAHIAcgD+AAoBZgAuASoBE0gAO -AD4EIgRxgOivECIAbgEwAB8AwQBrAS4A8gEtATEAdgH7A0IAagHkAEEAtgBtANUCtQBMASsDGQJgAtID -+QEvASwCEgFABEABlgBsAcoBroCLgFSAAoBmgBiASoAggESAWYAQgFiAqoAOgFOAB4BqgISAHICGgAuA -KICcgHKAkYDagE+AP4BdgDaA5oBDgHCAToBJ0gAOAD4EIgSWgOivECIElwSYBJkEmgSbBJwEnQSeBJ8E -oAShBKIEowSkBKUEpgSnBKgEqQSqBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuIDsgO2A7oDvgPCA -8YDygPOA9ID1gPaA94D4gPmA+oD7gPyA/YD+gP+BAQCBAQGBAQKBAQOBAQSBAQWBAQaBAQeBAQiBAQmB -AQqBAQuBAQyBAQ1fEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QFFRhYmxlIENvbHVtbiAoZ2Vu -cmUpXEZpbGUncyBPd25lcl8QEVZlcnRpY2FsIFNjcm9sbGVyW1Njcm9sbCBWaWV3XxAVVGFibGUgQ29s -dW1uIChsZW5ndGgpXxARVGFibGUgSGVhZGVyIFZpZXdfEBRUYWJsZSBDb2x1bW4gKHRpdGxlKV8QFFRh -YmxlIENvbHVtbiAodHJhY2spXxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlzdClfEBtUZXh0IEZp -ZWxkIENlbGwgKFRleHQgQ2VsbClfEBNQbGF5bGlzdCBDb250cm9sbGVyXxAdUHVzaCBCdXR0b24gKEFk -ZCB0byBQbGF5bGlzdClfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktNl8QG1BhbmVsIChPcGVu -IGZyb20gU3BvdGxpZ2h0KV8QE0hvcml6b250YWwgU2Nyb2xsZXJfEBpTdGF0aWMgVGV4dCAoU2VhcmNo -IFBhdGg6KV8QSlNwb3RsaWdodCBQbGF5bGlzdCBWaWV3IChBcnRpc3QsIEFsYnVtLCBUaXRsZSwgTGVu -Z3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXxAeVGV4dCBGaWVsZCBDZWxsIChTZWFyY2ggUGF0aDopXENv -bnRlbnQgVmlld18QFVRhYmxlIENvbHVtbiAoYXJ0aXN0KV8QG1Nwb3RsaWdodCBTZWFyY2ggQ29udHJv -bGxlcl8QEVNlYXJjaCBGaWVsZCBDZWxsWVBhdGggQ2VsbF8QH1NoYXJlZCBVc2VyIERlZmF1bHRzIENv -bnRyb2xsZXJfEBNUYWJsZSBDb2x1bW4gKHllYXIpXxAUVGFibGUgQ29sdW1uIChhbGJ1bSlfEB1UZXh0 -IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktM18QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS00W0Fw -cGxpY2F0aW9uXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTVcU2VhcmNoIEZpZWxkXxAdVGV4 -dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTFfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMtIA -DgA+BCIE3YDoogDVA0KAHICq0gAOAD4EIgTigOiiAP4DV4AdgKvSAA4APgQiBOeA6K8QNAMSAG4BMAAf -AMEBLgMFAS0A8gExAwoB+wNCAxEDBAMGAEEDDgBtAwwCtQMDAEwDGQJgAwcDDQP5AZYAbAHKAa4DAgMP -AGsDCwB2AeQAagMIALYA1QErAwEDEALSAUABLAEvAhIEQAMJgOGAi4BUgAKAZoBKgKaARIAggFmAvoBY -gKqA2YCkgKmAB4DNgISAxoCGgKKAC4CcgHKAsoDJgNqAQ4BwgE6ASYCggNGAGIDCgBCAU4AOgLSAaoAc -gCiAm4DVgJGANoA/gE+AXYDmgLbSAA4APgQiBR6A6K8QNAUfBSAFIQUiBSMFJAUlBSYFJwUoBSkFKgUr -BSwFLQUuAqEFMAUxBTIFMwU0BTUFNgU3BTgFOQU6BTsFPAU9BT4FPwVABUEFQgVDBUQFRQVGBUcFSAVJ -BUoFSwVMBU0FTgVPBVAFUQVSgQESgQETgQEUgQEVgQEWgQEXgQEYgQEZgQEagQEbgQEcgQEdgQEegQEf -gQEggQEhgH+BASKBASOBASSBASWBASaBASeBASiBASmBASqBASuBASyBAS2BAS6BAS+BATCBATGBATKB -ATOBATSBATWBATaBATeBATiBATmBATqBATuBATyBAT2BAT6BAT+BAUCBAUGBAUKBAUOBAUQQaRBYEB4Q -lhAbECAQShAkEB0QZhArEBAQbhBMEJUQXhBPEDoQUBBIEBEQOBBrEGwQKBA3ECkQJRA9EGUQGBAtECoQ -BRBbEBoQHBAiEFoQXRBZECcQIRAsE//////////9EGjSAA4APgBoBYOAXqDSAA4APgQiBYaA6KDSAA4A -PgQiBYmA6KDSADcAOAWLBYyiBYwAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYC -/AMCA00DVANbA2kDewOXA6UDsQO9A8sD1gPkBAAEDgQhBDMETQRXBGQEZgRpBGsEbgRxBHMEdQR3BHoE -fQR/BIIEhASGBIgEiwSNBJAEmQSlBKcEqQTFBM4E1wTiBOcE9gT/BRIFGwUmBSgFKwUtBVYFYwVwBX4F -iAWWBaMFtQXJBdUF1wXZBdsF3QXiBeQF5gXoBeoF7AYHBh0GJQZCBlQGXwZoBnQGfQaJBosGjQaPBpIG -lAaWBpgGoQajBq4GsAayBrQGtga4BtkG4QboBvIG9Ab2BvgG+gb9Bv4HAAcCBxwHTQdZB28HhAeTB6UH -sAe6B8gH2gfnB/UH+gf8B/4IAAgCCAQIBggICAoIDAgRCBoILAg9CEQISwhUCFYIXwhhCGQIcQh6CH8I -hgiHCJAImQimCLMIvAjHCNAI2gjhCO0JLAk4CUEJTglhCW4JegmICZYJmAmaCZwJngmhCaMJpQmnCboJ -vQm/CcEJwwnFCccJ0AnSCd0J3wnhCeMJ5QnnChQKHgooCjIKNAo2CjgKOgo9Cj8KQQpDCkUKRwpQClIK -VQpXCrYK2AriCvgLBQsZCy4LSAtkC38LjguaC7kLyAvUC9YL2AvaC+ML5QvnC+kL6gvsC/UL9wwADAMM -BQwGDAgMCgwMDA4MEAwSDBQMHQw1DEEMTAxpDGsMbQxvDHEMcwx1DKIMpAymDKgMqgysDK4MsAyyDLQM -tgzADMkM0gzmDP8NAQ0DDQUNDg0QDRINKQ0yDTsNSQ1SDVQNYw1lDWcNaQ1rDW0Nbw1xDZoNqQ22DcMN -yw3WDeUN8A37DfwN/g4ADgIOCw4NDg8OGA4hDiMOKg5HDlMOVQ5XDlkOWw5dDmQOdQ53DoAOgg6FDpoO -og6vDrsOyQ7LDs0Ozw7RDtMO2g7mDvMO+w79DwAPCQ8ODyMPJQ8nDykPKw89D0oPTA9PD1gPYw93D4kP -qg+vD7EPsw+1D7cPuQ+8D74PyA/dD98P4Q/jD+UP/hALEA0QGRAuEDAQMhA0EDYQSRBSEFsQZBBpEHcQ -oBChEKMQpRCnELAQshC7EL0QwxDgEOIQ5BDmEOgQ6hDwERERExEVERcRGREbER0RRhFHEUkRSxFNEVYR -WBFhEWMRaRGGEYsRjRGPEZERkxGVEZsRqBGqEbYR1xHZEdsR3RHfEeER4xIMEg0SDxIREhMSHBIeEicS -KRIwEk0STxJRElMSVRJaElwSYxKEEoYSiBKKEowSjhKTEpUSvhK/EsESwxLFEs4S0BLZEtsS4BL9Ev8T -ARMDEwUTBxMMEy0TLxMxEzMTNRM3EzkTYhNjE2UTZxNpE2sTbRNzE5ATkhOUE5YTmBOaE6ATwRPDE8UT -xxPJE8sTzRP2E/cT+RP7E/0UBhQIFBEUExQZFDYUOBQ6FDwUPhRAFEYUZxRpFGsUbRRvFHEUcxR8FIMU -khSaFK8UsRSzFLUUtxTBFM4U0BTVFOwU9RT6FQkVIRUqFTMVPhVjFWwVdRV/FYEVgxWFFYcViRWLFY0V -lhWtFboVwxXOFdkWAhYEFgYWCBYKFgwWDhYQFhkWMRY6FjwWPxZBFloWYxZsFnkWmhacFp4WoBaiFqUW -phaoFqoWwxb4Fw0XIBc0F0kXXBdhF2MXZRdnF2kXaxdtF3IXcxd1F3cXeReOF5AXkheUF5YXrBfdF98X -5BfmF+gX6hfsF+4X8RfzF/gX/xgVGEoYcBhyGHQYdhh4GHoYfBh+GIQYjRiPGJIYlBihGKkYqxiwGLIY -tBi5GLsYvRjLGPcY/hkHGQ4ZJBkxGUcZUBlbGW8ZeBmFGZMZnxnAGcIZxBnGGcgZyxnMGc4Z0BnnGgga -DRoPGhEaExoVGhcaHBoeGisaQBpCGkQaRhpIGlUaXhppGo4amhqcGp4aoBqiGqQapRqnGqkashq0Grka -uxq9Gtka8Rr6GwEbDhsUGy0bThtaG3EbfBuBG4MbhRuHG4objBuOG5cbmRuaG6MbrBu3G8AbyxvZG+Qb -7Rv0HAwcFRwaHC0cNhw4HF8cYRxjHGUcZxxpHGscbRxvHHEccxx1HHcceRx7HH0cfxyBHIMclByiHKsc -sxy1HLccuRy7HMQcxhzIHOQc8Bz5HQAdFx0mHTcdOR07HT0dPx1XHWgdah1sHW4dcB13HYgdih2MHY4d -kB2sHb0dvx3BHcMdxR3UHd0d5B38Hg0eDx4RHhMeFR5GHmMeeh6FHpceqx66Ht8e+h8THxQfFh8XHxkf -Gh8cHx4fIB8hHyMfJB8lHzofTh9XH1kfah9sH24fcB9yH3Qfdh94H3ofiB+NH48fmB+dH6cfuB+6H7wf -vh/AH9Uf5h/oH+of7B/uIAIgIyAtIDcgQSBgIGIgZCBmIGggaiBsIG4gjiCUIK0guiC8IL8gwSDEIMYg -5CDtIPIg+yECIRohOyE9IT8hQSFDIUUhRyFJIWghgCGNIY8hkiGUIZchmSG2IbghuiG8Ib4hwCHCIeAh -7SH7IhgiGiIcIh4iICIiIiQiOiJHImgiaiJsIm4icCJyInQidiKVIq0iuiK8Ir8iwSLEIsYi5yLpIusi -7SLvIvEi8yL1IxMjKiM3IzkjPCM+I0EjQyNkI2YjaCNqI2wjbiNwI3IjkSOpI7YjuCO7I70jwCPCI+Mj -5SPnI+kj6yPtI+8j8SQQJCgkNSQ3JDokPCQ/JEEkYiRkJGYkaCRqJGwkbiRwJHkkjCSOJI8kmCSfJLok -xyTrJQglFSUXJRolHCUfJSElOiVTJXQldiV4JXolfCV+JYAlgiWiJbslyCXKJc0lzyXSJdQl3SXfJiQm -JiYoJiomLCYuJjAmMiY0JjYmOCY6JjwmPiZAJkImRCZGJkgmSiZMJk4mUCZSJlQmViZYJlomXCZeJmAm -YiZkJmYmbyZxJnMmgSaKJo8mmCaaJt8m4SbjJuUm5ybpJusm7SbvJvEm8yb1Jvcm+Sb7Jv0m/ycBJwMn -BScHJwknCycNJw8nEScTJxUnFycZJxsnHScfJyEnKicsJ3MndSd3J3kneyd9J38ngSeDJ4UnhyeJJ4sn -jSePJ5EnkyeVJ5cnmSebJ50nnyehJ6MnpSenJ6knqyetJ68nsSezJ7UntyfAJ8IoCSgLKA0oDygRKBMo -FSgXKBkoGygdKB8oISgjKCUoJygpKCsoLSgvKDEoNCg3KDooPShAKEMoRihJKEwoTyhSKFUoWChbKHgo -jyicKLAovCjUKOgo/ykWKTYpVClqKYopqinIKd4p+ypIKmkqdiqOKqwqwCrKKuwrAisZKzkrWStlK4Ur -kiuyK9Ir2yvdK+Ir5CvmK+8r8Sv2K/gr+iwDLAUscCxyLHQsdix4LHosfCx+LIAsgiyELIYsiCyKLIws -jiyQLJIslCyWLJgsmiycLJ4soCyiLKQspiyoLKosrCyuLLAssiy0LLYsuCy6LLwsvizALMIsxCzGLMgs -yizMLM4s0CzSLNQs1izYLOEs4y1OLVEtVC1XLVotXS1gLWMtZi1pLWwtby1yLXUteC17LX4tgC2DLYYt -iS2MLY8tki2VLZgtmy2eLaEtpC2nLaotrS2wLbMtti25Lbwtvy3CLcUtyC3LLc4t0S3ULdct2i3dLeAt -4y3mLekt6y3tLe8t8S3zLfUt9y35Lfst/S3/LgEuAy4FLgcuCS4LLg0uDy4RLhMuFS4XLhkuGy4dLh8u -IS4jLiUuJy4pLisuLS4vLjEuMy41LjcuOS47Lj0uPy5BLkouTC5VLlcuWC5hLmMuZC5tLm8ucC55Ln4A -AAAAAAACAgAAAAAAAAWNAAAAAAAAAAAAAAAAAAAujQ +APcCpQKpAqoCrQKxAroCuwLEAsUCygLLAs0C1wLcAt0C3gLiAuMC7gLxAvQC9wALAvgC+gL7Av4DFQMd +AyADIQMiAyYDKwNBA0IDQwNOA08DUQNTA1QDVwNcA10DYgNjA2gDaQNuA28DdAN1A3oDewOAA4EDhgOH +A5MDlAOVA5YDnAOdA58DogOqA6sDrAOyA7oDvgPCA8MDxAPKA8sDzAPUA9UD1gPcA+QD5QPmA+wD9AP1 +A/YD/AQDBAQEBQQMBA0EDgQPBBcEGAQZBB8EJwQoBCkELwRTBFYEVwRZBH0EogTHBMgEyQTKBMsEzATN +BM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE7gTz +BSwFZQVmBWcFaAVpBWoFawVsAoIFbQVuBW8FcABUBXEFcgVzBXQFdQV2BXcFeAV5BXoFewV8AIsFfQV+ +BX8FgAWBBYIFgwWEAFMFhQWGBYcBWgWIBYkFigWLBYwFjQWOBY8FkAWRBZIFkwWUBZUFmAWbBZ5VJG51 +bGzfEBIADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcA +KAApACoAKwAsAC0ALgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFs +dWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05T +RnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3Np +YmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0 +c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEB +ToDpgQETgQFNgJqA7oAFgQESgQEUgO+BAUuAAIAGgO2BAUwQmYEBFdIADgAyADMANFtOU0NsYXNzTmFt +ZYAEgANfEBlTcG90bGlnaHRXaW5kb3dDb250cm9sbGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25h +bWWiADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBa +TlMub2JqZWN0c4CPoQBBgAfaAEMADgBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAK1xO +U1dpbmRvd1ZpZXdcTlNTY3JlZW5SZWN0XU5TV2luZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xh +c3NcTlNXaW5kb3dSZWN0XxAPTlNXaW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tbTlNWaWV3 +Q2xhc3OAC4CZgJiACRIgAAAAgAqACBACEB+AAF8QGHt7MTk2LCAxOTJ9LCB7NDgwLCAzMTh9fV8QE09w +ZW4gZnJvbSBTcG90bGlnaHRXTlNQYW5lbNcAWgAOAFsAXABdAF4AXwBgAGEAYgBjAGQAYABmXxAPTlNO +ZXh0UmVzcG9uZGVyWk5TU3Vidmlld3NYTlN2RmxhZ3NbTlNGcmFtZVNpemVYTlNXaW5kb3dbTlNTdXBl +cnZpZXeADICXgA0RAQCAlYAMgJbSAA4APgBoAGmAXqUAagBrAGwAbQBugA6AGIBwgISAi9gAWgAOAHAA +cQBcAHIAXgBfAEwAdAB1AHYAdwB4AGAATFdOU0ZyYW1lVk5TQ2VsbFlOU0VuYWJsZWSAC4AXgA+AEBEB +CQmADIALXxAXe3szMzUsIDI3Mn0sIHsxMzEsIDMyfX3cAH0ADgB+AH8AgACBAIIAgwCEAIUAhgCHAIgA +iQCKAIsAjACKAI4AjwBqAJEAkgCTW05TQ2VsbEZsYWdzXxATTlNBbHRlcm5hdGVDb250ZW50c18QEk5T +UGVyaW9kaWNJbnRlcnZhbF5OU0J1dHRvbkZsYWdzMl8QD05TS2V5RXF1aXZhbGVudFpOU0NvbnRlbnRz +WU5TU3VwcG9ydF1OU0NvbnRyb2xWaWV3XxAPTlNQZXJpb2RpY0RlbGF5XE5TQ2VsbEZsYWdzMl1OU0J1 +dHRvbkZsYWdzEgQB/gCAFoAVEBkQgYAVgBGAEoAOEMgSCAAAABP/////hoJA/18QD0FkZCB0byBQbGF5 +bGlzdNQADgCWAJcAmACZAJoAmwCcVk5TU2l6ZVZOU05hbWVYTlNmRmxhZ3OAFCNAKgAAAAAAAIATEQQU +XEx1Y2lkYUdyYW5kZdIANwA4AJ8AoKIAoAA7Vk5TRm9udFDSADcAOACjAKSkAKQApQBxADtcTlNCdXR0 +b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4AKcAqKUAqACpAKoAqwA7WE5TQnV0dG9uWU5TQ29udHJvbFZO +U1ZpZXdbTlNSZXNwb25kZXLfEA8AWgCtAA4AcACuAK8AsABbALEAXABeAF8AsgCzALQATAC2ALcAuAC5 +ALoAuwC8AL0AvgBgAEwAwQDCAMJbTlNIU2Nyb2xsZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNI +ZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFtdHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRl +bnRWaWV3gAuAaoBvgG4RAjCAJIAhgBlPEBAAAAAAAAAAAEGYAABBmAAAEQESgAyAC4BmgBqAGtIADgA+ +AGgAxoBepQDCAMEAtgC7ALqAGoBmgGqAIYAk2wBaAA4AcADNAFsAXADOAF4AzwBfALMAawDRANIAUwDT +ANQA1QBgANcAawDVWU5TY3ZGbGFnc1lOU0RvY1ZpZXdZTlNCR0NvbG9ygBiAZYBkgBsRCQCAHIAMgDiA +GIAc0gAOAD4AaADcgF6hANWAHN8QFwBaAN8ADgDgAOEA4gDjAOQArwDlAOYA5wBcAF0AcgDoAF4AMgDp +AOoAXwDrAOwAwgDuAO8A8ADxAPIA1wB4ALoA9gD3APgA+QD6AHgA/ABgAP4A/wEAAMIBAgEDXxAfTlNE +cmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlOU1R2RmxhZ3NfEBNOU09yaWdpbmFsQ2xhc3NOYW1l +XE5TSGVhZGVyVmlld18QEU5TQmFja2dyb3VuZENvbG9yXxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJ +bnRlcmNlbGxTcGFjaW5nV2lkdGhfEBlOU0NvbHVtbkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNl +bGxTcGFjaW5nSGVpZ2h0Xk5TQXV0b3NhdmVOYW1lW05TR3JpZENvbG9yXxAcTlNEcmFnZ2luZ1NvdXJj +ZU1hc2tGb3JMb2NhbF5OU1RhYmxlQ29sdW1uc1tOU1Jvd0hlaWdodIAaEACAYxP/////28CAAIAegCCA +OAmAJCNACAAAAAAAABABI0AAAAAAAAAAERESgB8JgGKADIAdgF8QD4AagCcjQDEAAAAAAABfEBVTcG90 +bGlnaHRQbGF5bGlzdFZpZXdbTlNUYWJsZVZpZXdaezQ0MCwgMTk4fdcAWgAOAFwAXQBeAF8BBQC7AQkA +YwEKAGAAuwDVgCGAI4AigAyAIYAc2wBaAA4AzQBbAFwAXQDOAF4AzwBfALMAawDRAREBEgDUARMA8gBg +ANcAawDygBiAZRAEgGyAbYAggAyAOIAYgCBZezQ0MCwgMTd90gA3ADgBGwEcpAEcAKoAqwA7XxARTlNU +YWJsZUhlYWRlclZpZXfWAFoADgBwAFwAXgBfAGsBHwEgASEAYABrgBiAJoAlE/////+AAAEAgAyAGF8Q +FHt7LTI2LCAwfSwgezE2LCAxN3190gA3ADgBJgEnpAEnAKoAqwA7XV9OU0Nvcm5lclZpZXfSAA4APgBo +ASqAXqcBKwEsAS0BLgEvATABMYAogD+ARIBKgE+AVIBZ2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgBPAE9 +AT4BPwFAAUEBQgFDANVeTlNJc1Jlc2l6ZWFibGVcTlNIZWFkZXJDZWxsXE5TSWRlbnRpZmllcldOU1dp +ZHRoWk5TRGF0YUNlbGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdpZHRoCYA+gCqAKSNA +UYAAAAAAAIA2EAMjQEIAAAAAAAAjQI9AAAAAAACAHFZhcnRpc3TXAH0ADgDjAIIAgwCGAUcAiAFIAUkB +SgFLAO4BTFtOU1RleHRDb2xvcoA1gC2AK4AsgDJWQXJ0aXN01AAOAJYAlwCYAJkBUACbAVKAFCNAJgAA +AAAAAIATEQwc1QAOAVQBVQFWAVcBWAFZAVoBWwFcV05TQ29sb3JcTlNDb2xvclNwYWNlW05TQ29sb3JO +YW1lXU5TQ2F0YWxvZ05hbWWAMYAwEAaAL4AuVlN5c3RlbVtoZWFkZXJDb2xvctMADgFVAWABWAFBAWJX +TlNXaGl0ZYAxQjEA0gA3ADgBZAFUogFUADvVAA4BVAFVAVYBVwFYAWcBWgFoAVyAMYA0gDOALl8QD2hl +YWRlclRleHRDb2xvctMADgFVAWABWAFBAW2AMUIwANIANwA4AW8BcKUBcAFxAKUAcQA7XxARTlNUYWJs +ZUhlYWRlckNlbGxfEA9OU1RleHRGaWVsZENlbGzYAH0ADgDjAIIAgwCEAIYBRwFzAXQA1wF2AI8A1QF5 +AXoSFCH+QIA9gDiAN4ASgBwRCACAO1lUZXh0IENlbGzVAA4BVAFVAVYBVwFYAX4BWgF/AVyAMYA6gDmA +Ll8QFmNvbnRyb2xCYWNrZ3JvdW5kQ29sb3LTAA4BVQFgAVgBQQGEgDFLMC42NjY2NjY2OQDVAA4BVAFV +AVYBVwFYAWcBWgGIAVyAMYA0gDyALl8QEGNvbnRyb2xUZXh0Q29sb3LSADcAOAGMAXGkAXEApQBxADvS +ADcAOAGOAY+iAY8AO11OU1RhYmxlQ29sdW1u2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgBPAGTAZQBlQGW +AUEBlwFDANUJgD6AQYBAI0BSQAAAAAAAgEMjQEOAAAAAAACAHFVhbGJ1bdcAfQAOAOMAggCDAIYBRwCI +AUgBSQGdAUsA7gFMgDWALYBCgCyAMlVBbGJ1bdgAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAXkB +eoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwBqwGsAa0BrgFBAa8BQwDVCYA+gEaA +RSNAUsAAAAAAAIBJI0BEgAAAAAAAgBxVdGl0bGXXAH0ADgDjAIIAgwCGAUcBswFIAbUBtgFLAO4BTBIE +gf4AgDWASIBHgCyAMlVUaXRsZdMADgFVAWABWAFBAbyAMUswLjMzMzMzMjk5ANgAfQAOAOMAggCDAIQA +hgFHAXMBdADXAXYAjwDVAXkBeoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwBxwHI +AckBygFBAcsBQwDVCYA+gEyASyNAUqewAAAAAIBOI0BET2AgAAAAgBxWbGVuZ3Ro1wB9AA4A4wCCAIMA +hgFHAIgBSAFJAdEBSwHTAUyANYAtgE2ALBIEAAAAgDJWTGVuZ3Ro2AB9AA4A4wCCAIMAhACGAUcBcwF0 +ANcBdgCPANUB3AF6gD2AOIA3gBKAHBIEAAgAgDvaATMADgE0ATUBNgE3ATgBOQE6AQUAeAE8AeEB4gHj +AeQBQQHlAUMA1QmAPoBRgFAjQEYAAAAAAACAUyNAJAAAAAAAAIAcVHllYXLXAH0ADgDjAIIAgwCGAUcA +iAFIAUkB6wFLAdMBTIA1gC2AUoAsgDJUWWVhctgAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAdwB +eoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwB+QH6AeMB+wFBAeUBQwDVCYA+gFaA +VYBYgBxVZ2VucmXXAH0ADgDjAIIAgwCGAUcAiAFIAUkCAQFLAO4BTIA1gC2AV4AsgDJVR2VucmXYAH0A +DgDjAIIAgwCEAIYBRwFzAXQA1wF2AI8A1QF5AXqAPYA4gDeAEoAcgDvaATMADgE0ATUBNgE3ATgBOQE6 +AQUAeAE8Ag8CEAIRAhIBQQITAUMA1QmAPoBbgFojQEMAAAAAAACAXSNAEAAAAAAAAIAcVXRyYWNr1wB9 +AA4A4wCCAIMAhgFHAIgBSAFJAhkBSwHTAUyANYAtgFyALIAyVVRyYWNr2AB9AA4A4wCCAIMAhACGAUcB +cwF0ANcBdgCPANUB3AF6gD2AOIA3gBKAHIA70gA3ADgCJQImowImAicAO15OU011dGFibGVBcnJheVdO +U0FycmF51QAOAVQBVQFWAVcBWAIqAVoCKwFcgDGAYYBggC5ZZ3JpZENvbG9y0wAOAVUBYAFYAUECMIAx +RDAuNQBfEBRDb2dTcG90bGlnaHRQbGF5bGlzdNIANwA4AjMCNKICNAA7Xk5TQ2xhc3NTd2FwcGVyXxAV +e3swLCAxN30sIHs0NDAsIDE5OH190gA3ADgCNwI4pAI4AKoAqwA7Wk5TQ2xpcFZpZXfZAFoCOgAOAHAA +XABeAjsAXwI8AGsAawI/AkABIQBgAkIAawJEWE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVyY2VudIAYgBiA +aYBngAyAaIAYIz/qN4SgAAAAXxAUe3s4NSwgMTd9LCB7MTUsIDY4fX1cX2RvU2Nyb2xsZXI60gA3ADgC +SAJJpQJJAKkAqgCrADtaTlNTY3JvbGxlctoAWgI6AA4AcACuAFwAXgI7AF8CPABrAGsCPwJOAPcBIQBg +AkIAawJSgBiAGIBpgGuADIBogBgjP+oGoAAAAABfEBV7ezAsIDIwMH0sIHs0NDAsIDE1fX3SAA4APgBo +AlaAXqEA8oAgXxAWe3syMCwgNDV9LCB7NDQwLCAyMTV9fdIANwA4AloCW6QCWwCqAKsAO1xOU1Njcm9s +bFZpZXfYAFoADgBwAHEAXAByAF4AXwBMAl4CXwJgAmEAeABgAEyAC4CDgHGAchEBCgmADIALXxAWe3sy +MCwgMjc4fSwgezMxMywgMjJ9fd0AfQAOAmcA4wCCAIMAhACGAmgCaQJqAmsBRwJsAm0CbgJvAIoAjwBs +AnMA9wB4AnUCdgF6XxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHlsZV8QEU5TRHJh +d3NCYWNrZ3JvdW5kXxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50cxIUcf5AgIKA +eIBzgBWAEoBwEhAABAAJgHUQ/4A71QAOAVQBVQFWAVcBWAFZAVoCewFcgDGAMIB0gC5fEBN0ZXh0QmFj +a2dyb3VuZENvbG9y3AI6AH0ADgB/AIAAgQCCAIQAhQCGAjsAhwJgAoAAiQKCAO4AigKEAGwChgDuAocC +iIByEgAB/gCAFhBLgBWAdoBwEQGQgHcSCERA/1ZzZWFyY2hfEBNfc2VhcmNoRmllbGRTZWFyY2g63QI6 +AH0ADgB/AIAAgQKMAIIAhACFAIYCOwCHAmACgACJAoIA7gCKApACkQBsAoYA7gKTAohfECNOU0FjY2Vz +c2liaWxpdHlPdmVycmlkZGVuQXR0cmlidXRlc4BygBaAFYB6gHmAcICBVWNsZWFy0gAOAD4AaAKXgF6h +ApiAe9MADgKaAD4CmwKcAp9XTlMua2V5c4CAogKdAp6AfIB9ogKgAqGAfoB/XUFYRGVzY3JpcHRpb25f +EClOU0FjY2Vzc2liaWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzSADcAOAKmAqej +AqcCqAA7XxATTlNNdXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNoRmllbGRDYW5j +ZWw60gA3ADgCqwKspQKsAXEApQBxADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4Aq4Cr6YCrwKwAKkA +qgCrADtdTlNTZWFyY2hGaWVsZFtOU1RleHRGaWVsZNgAWgAOAHAAcQBcAHIAXgBfAEwCswK0ArUCtgB4 +AGAATIALgIqAhYCGEQEhCYAMgAtfEBR7ezg4LCAyMH0sIHs5NiwgMTd9fdgAfQAOAOMAggCDAIQAhgFH +ArwBdAK+Ar8AjwBtAsIBehIEAf5AgD2AiICHgBKAhBIQQAQAgDtcU2VhcmNoIFBhdGg61QAOAVQBVQFW +AVcBWAF+AVoCyAFcgDGAOoCJgC5cY29udHJvbENvbG9y0gA3ADgCzAKwpQKwAKkAqgCrADvZAFoADgBw +AHECzgBcAHIAXgBfAEwC0ALRAtIC0wK2AHgAYABMW05TRHJhZ1R5cGVzgAuAlICQgJGAjAmADIAL0gAO +AD4APwLZgI+iAtoC24CNgI5fEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNGaWxlbmFtZXNQ +Ym9hcmRUeXBl0gA3ADgC3wLgowLgAuEAO1xOU011dGFibGVTZXRVTlNTZXRfEBZ7ezE4OSwgMTV9LCB7 +MjcxLCAyNn192ALkAH0ADgCDAIQAhgLlAuYAUwLnAugAjwBuAusC7ABuW05TUGF0aFN0eWxlXxAUTlNQ +YXRoQ29tcG9uZW50Q2VsbHNaTlNEZWxlZ2F0ZRIUIf4BgJOAEoCLEYAAgJKAi9IADgA+AGgC8IBeoNIA +NwA4AvIC86QC8wClAHEAO1pOU1BhdGhDZWxs0gA3ADgC9QL2pQL2AKkAqgCrADtdTlNQYXRoQ29udHJv +bFp7NDgwLCAzMTh90gA3ADgC+QCqowCqAKsAO18QFXt7MCwgMH0sIHsxMjgwLCA3Nzh9fdIANwA4AvwC +/aIC/QA7XxAQTlNXaW5kb3dUZW1wbGF0ZdIADgA+AGgDAIBerxAUAwEDAgMDAwQDBQMGAwcDCAMJAwoD +CwMMAw0DDgMPAxADEQMSAxMDFICbgKCAqoCsgK6AsICygLSAtoC4gLqAwoDGgM6A0oDWgNqA3YDhgOXU +AA4DFgMXAxgDGQMaAG4DHF1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAn4CcgIuAntIADgAy +ADMDH4AEgJ1fEBlTcG90bGlnaHRTZWFyY2hDb250cm9sbGVyXxARY2hhbmdlU2VhcmNoUGF0aDrSADcA +OAMjAySjAyQDJQA7XxAVTlNOaWJDb250cm9sQ29ubmVjdG9yXk5TTmliQ29ubmVjdG9y1AAOAxYDFwMY +AycDGgMpAyqAqYCcgKGAqNwDLAAOAy0A4QMuAy8DMAMxAzIAMgMzAzQAeADvAHgDOAB4AzoDOwM8AHgD +PgB4AHhfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uWk5T +RWRpdGFibGVfEA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0RlY2xhcmVkS2V5 +c18QIk5TQ2xlYXJzRmlsdGVyUHJlZGljYXRlT25JbnNlcnRpb25fEBhOU1NlbGVjdHNJbnNlcnRlZE9i +amVjdHNfEBZOU0F2b2lkc0VtcHR5U2VsZWN0aW9uCYBjCYCjCYCmgKWApAmAogkJXxAbU3BvdGxpZ2h0 +UGxheWxpc3RDb250cm9sbGVyXxARTlNBcnJheUNvbnRyb2xsZXLSAA4APgBoA0WAXqgBtgGsAeIBPgGU +AfoByAIQgEeARYBQgCmAQIBVgEuAWl1QbGF5bGlzdEVudHJ50QAOA1CAp9IANwA4A1IDL6IDLwA7XxAZ +c3BvdGxpZ2h0U2VhcmNoQ29udHJvbGxlctIANwA4A1UDVqMDVgMlADtfEBROU05pYk91dGxldENvbm5l +Y3RvctQADgMWAxcDGAMnAykDGgNbgKmAoYCcgKtfEBJwbGF5bGlzdENvbnRyb2xsZXLUAA4DFgMXAxgD +JwMpANUDYYCpgKGAHICtWmRhdGFTb3VyY2XUAA4DFgMXAxgDJwBBAB8DZ4CpgAeAAoCvVndpbmRvd9QA +DgMWAxcDGAMnANUDKQNtgKmAHIChgLFZdGFibGVWaWV31AAOAxYDFwMYAxkDGgBqA3OAn4CcgA6As15h +ZGRUb1BsYXlsaXN0OtQADgMWAxcDGAMnAB8DGgN5gKmAAoCcgLVfEBlzcG90bGlnaHRXaW5kb3dDb250 +cm9sbGVy1AAOAxYDFwMYAycAbgMaA3+AqYCLgJyAt1twYXRoQ29udHJvbNQADgMWAxcDGAMnAGwAQQOF +gKmAcIAHgLlfEBVpbml0aWFsRmlyc3RSZXNwb25kZXLYAA4DFgOIA4kDFwMYA4oDiwOMAykDjgOPAS4D +kQOSAFNZTlNLZXlQYXRoWU5TQmluZGluZ1lOU09wdGlvbnNfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JW +ZXJzaW9ugMGAoYC9gLyASoC7gL5fEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmxlbmd0aFV2YWx1ZV8Q +FmFycmFuZ2VkT2JqZWN0cy5sZW5ndGjTAA4CmgA+A5cDmAOagMChA5mAv6ECoYB/XxAbTlNDb25kaXRp +b25hbGx5U2V0c0VkaXRhYmxl0gA3ADgDngKoogKoADvSADcAOAOgA6GjA6EDJQA7XxAVTlNOaWJCaW5k +aW5nQ29ubmVjdG9y2AAOAxYDiAOJAxcDGAOKA4sDjAMpA6UDjwEvA6gDqQBTgMGAoYDEgLyAT4DDgMVf +EBt2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnllYXJfEBRhcnJhbmdlZE9iamVjdHMueWVhctMADgKaAD4D +lwOuA7CAwKEDmYC/oQKhgH/YAA4DFgOIA4kDFwMYA4oDiwOMA7QDtQOPAG4DuAO5AFOAwYDHgMqAvICL +gMmAy9IADgO7A7wAeF8QEE5TU2hhcmVkSW5zdGFuY2WAyAnSADcAOAO/A8CjA8ADwQA7XxAYTlNVc2Vy +RGVmYXVsdHNDb250cm9sbGVyXE5TQ29udHJvbGxlcl8QIXZhbHVlOiB2YWx1ZXMuc3BvdGxpZ2h0U2Vh +cmNoUGF0aF8QGnZhbHVlcy5zcG90bGlnaHRTZWFyY2hQYXRo0wAOApoAPgOXA8YDyIDAoQPHgMyhA8mA +zV8QFk5TVmFsdWVUcmFuc2Zvcm1lck5hbWVfEBZTdHJpbmdUb1VSTFRyYW5zZm9ybWVy2AAOAxYDiAOJ +AxcDGAOKA4sDjAMpA88DjwErA9ID0wBTgMGAoYDQgLyAKIDPgNFfEB12YWx1ZTogYXJyYW5nZWRPYmpl +Y3RzLmFydGlzdF8QFmFycmFuZ2VkT2JqZWN0cy5hcnRpc3TTAA4CmgA+A5cD2APagMChA5mAv6ECoYB/ +2AAOAxYDiAOJAxcDGAOKA4sDjAMpA98DjwEsA+ID4wBTgMGAoYDUgLyAP4DTgNVfEBx2YWx1ZTogYXJy +YW5nZWRPYmplY3RzLmFsYnVtXxAVYXJyYW5nZWRPYmplY3RzLmFsYnVt0wAOApoAPgOXA+gD6oDAoQOZ +gL+hAqGAf9gADgMWA4gDiQMXAxgDigOLA4wDKQPvA48BMAPyA/MAU4DBgKGA2IC8gFSA14DZXxAcdmFs +dWU6IGFycmFuZ2VkT2JqZWN0cy5nZW5yZV8QFWFycmFuZ2VkT2JqZWN0cy5nZW5yZdMADgKaAD4DlwP4 +A/qAwKEDmYC/oQKhgH/XAA4DFgOIA4kDFwMYA4sDjAMaA/8DjwJgBAIAU4DBgJyA3IC8gHKA218QE3Zh +bHVlOiBzZWFyY2hTdHJpbmdcc2VhcmNoU3RyaW5n1wAOAxYDiAOJAxcDGAOLA4wDGgQIBAkDKQQLAFOA +wYCcgOCA34ChgN5fEBtjb250ZW50QXJyYXk6IHF1ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5 +LnJlc3VsdHPYAA4DFgOIA4kDFwMYA4oDiwOMAykEEgOPATEEFQQWAFOAwYChgOOAvIBZgOKA5F8QHHZh +bHVlOiBhcnJhbmdlZE9iamVjdHMudHJhY2tfEBVhcnJhbmdlZE9iamVjdHMudHJhY2vTAA4CmgA+A5cE +GwQdgMChA5mAv6ECoYB/2AAOAxYDiAOJAxcDGAOKA4sDjAMpBCIDjwEtBCUEJgBTgMGAoYDngLyARIDm +gOhfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnRpdGxlXxAVYXJyYW5nZWRPYmplY3RzLnRpdGxl0wAO +ApoAPgOXBCsELYDAoQOZgL+hAqGAf9IADgA+BDAEMYDsrxAhAfsAagK1AGsATAFAA7QDGgEtAHYBygGW +ATABLALSAykEQgEvAeQBMQDBANUBrgBtAGwBKwBuAS4CEgBBALYA8gJggFiADoCGgBiAC4A2gMeAnIBE +gBCAToBDgFSAP4CRgKGA6oBPgFOAWYBmgByASYCEgHCAKICLgEqAXYAHgGqAIIBy0gAOADIAMwRVgASA +611OU0FwcGxpY2F0aW9u0gA3ADgEWAInogInADvSAA4APgQwBFuA7K8QIQEwAEwAbQBMAEEBKwAfAB8A +1QBqAS4BLADVANUAbgAfAB8A1QEvANUAawBrAS0ATABMANUATADVATEAHwBrAGsAbIBUgAuAhIALgAeA +KIACgAKAHIAOgEqAP4AcgByAi4ACgAKAHIBPgByAGIAYgESAC4ALgByAC4AcgFmAAoAYgBiAcNIADgA+ +BDAEf4DsrxAiAfsDtABqAGsATAK1AUADGgEtAHYBMAGWAcoBLALSAB8DKQRCAS8B5AExAMEA1QGuAG0A +bAErAG4BLgISAEEAtgDyAmCAWIDHgA6AGIALgIaANoCcgESAEIBUgEOAToA/gJGAAoChgOqAT4BTgFmA +ZoAcgEmAhIBwgCiAi4BKgF2AB4BqgCCActIADgA+BDAEpIDsrxAiBKUEpgSnBKgEqQSqBKsErAStBK4E +rwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMaA8IDxgPKA84D0gPWA +9oD3gPiA+YD6gPuA/ID9gP6A/4EBAIEBAYEBAoEBA4EBBIEBBYEBBoEBB4EBCIEBCYEBCoEBC4EBDIEB +DYEBDoEBD4EBEIEBEV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0xXxAfU2hhcmVkIFVzZXIg +RGVmYXVsdHMgQ29udHJvbGxlcl8QHVB1c2ggQnV0dG9uIChBZGQgdG8gUGxheWxpc3QpW1Njcm9sbCBW +aWV3XENvbnRlbnQgVmlld18QHlRleHQgRmllbGQgQ2VsbCAoU2VhcmNoIFBhdGg6KV8QHVRleHQgRmll +bGQgQ2VsbCAoVGV4dCBDZWxsKS01XxAbU3BvdGxpZ2h0IFNlYXJjaCBDb250cm9sbGVyXxAUVGFibGUg +Q29sdW1uICh0aXRsZSlfEB1CdXR0b24gQ2VsbCAoQWRkIHRvIFBsYXlsaXN0KV8QFFRhYmxlIENvbHVt +biAoZ2VucmUpXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTJfEB1UZXh0IEZpZWxkIENlbGwg +KFRleHQgQ2VsbCktNl8QFFRhYmxlIENvbHVtbiAoYWxidW0pWVBhdGggQ2VsbFxGaWxlJ3MgT3duZXJf +EB1TcG90bGlnaHQgUGxheWxpc3QgQ29udHJvbGxlcltBcHBsaWNhdGlvbl8QE1RhYmxlIENvbHVtbiAo +eWVhcilfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktM18QFFRhYmxlIENvbHVtbiAodHJhY2sp +XxARVmVydGljYWwgU2Nyb2xsZXJfEEpTcG90bGlnaHQgUGxheWxpc3QgVmlldyAoQXJ0aXN0LCBBbGJ1 +bSwgVGl0bGUsIExlbmd0aCwgWWVhciwgR2VucmUsIFRyYWNrKV8QG1RleHQgRmllbGQgQ2VsbCAoVGV4 +dCBDZWxsKV8QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDopXFNlYXJjaCBGaWVsZF8QFVRhYmxlIENv +bHVtbiAoYXJ0aXN0KV8QGlBvcCBVcCBQYXRoIENvbnRyb2wgV2lkZ2V0XxAVVGFibGUgQ29sdW1uIChs +ZW5ndGgpXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTRfEBtQYW5lbCAoT3BlbiBmcm9tIFNw +b3RsaWdodClfEBNIb3Jpem9udGFsIFNjcm9sbGVyXxARVGFibGUgSGVhZGVyIFZpZXdfEBFTZWFyY2gg +RmllbGQgQ2VsbNIADgA+BDAE64DsogDVAymAHICh0gAOAD4EMATwgOyiAP4DPoAdgKLSAA4APgQwBPWA +7K8QNgBqAUADtAMMAS0BygEwAZYDAwMSAwYEQgMIAS8B5AExAMEA1QGuAwsAbQMJAG4DBQC2Aw8A8gMK +AmADBwMUAfsAawK1AxAATAMOAw0DGgB2ASwDAQLSAwQAHwMpAwICEgBsASsDEwEuAxEAQYAOgDaAx4DC +gESAToBUgEOAqoDdgLCA6oC0gE+AU4BZgGaAHIBJgLqAhIC2gIuAroBqgNKAIIC4gHKAsoDlgFiAGICG +gNaAC4DOgMaAnIAQgD+Am4CRgKyAAoChgKCAXYBwgCiA4YBKgNqAB9IADgA+BDAFLoDsrxA2BS8FMAUx +BTIFMwU0BTUFNgU3BTgFOQU6BTsFPAU9BT4FPwVABUEFQgVDBUQFRQVGBUcFSAVJBUoFSwVMBU0FTgVP +BVAFUQVSBVMFVAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8FYAVhBWIFYwKhgQEWgQEXgQEYgQEZgQEagQEb +gQEcgQEdgQEegQEfgQEggQEhgQEigQEjgQEkgQElgQEmgQEngQEogQEpgQEqgQErgQEsgQEtgQEugQEv +gQEwgQExgQEygQEzgQE0gQE1gQE2gQE3gQE4gQE5gQE6gQE7gQE8gQE9gQE+gQE/gQFAgQFBgQFCgQFD +gQFEgQFFgQFGgQFHgQFIgQFJgQFKgH8QBRAnEGwQXhAkECkQHhAoEC0QlRP//////////RBMECoQHRAb +EBwQJRBpEE8QWhBYEEgQGhBlED0QOBBKEF0QKxAYEFAQZhBoEG4QERAhEFsQWRCXEJgQEBCWECwQNxAi +EGsQIBA60gAOAD4AaAWXgF6g0gAOAD4EMAWagOyg0gAOAD4EMAWdgOyg0gA3ADgFnwWgogWgADteTlNJ +Qk9iamVjdERhdGEACAAZACIAJwAxADoAPwBEAFIAVABmAwgDDgNZA2ADZwN1A4cDowOxA70DyQPXA+ID +8AQMBBoELQQ/BFkEYwRwBHIEdQR3BHoEfQR/BIEEgwSGBIkEiwSOBJAEkgSUBJcEmQScBKUEsQSzBLUE +0QTaBOME7gTzBQIFCwUeBScFMgU0BTcFOQViBW8FfAWKBZQFogWvBcEF1QXhBeMF5QXnBekF7gXwBfIF +9AX2BfgGEwYpBjEGTgZgBmsGdAaABokGlQaXBpkGmwaeBqAGogakBq0Grwa6BrwGvgbABsIGxAblBu0G +9Ab+BwAHAgcEBwYHCQcKBwwHDgcoB1kHZQd7B5AHnwexB7wHxgfUB+YH8wgBCAYICAgKCAwIDggQCBII +FAgWCBgIHQgmCDgISQhQCFcIYAhiCGsIbQhwCH0IhgiLCJIIkwicCKUIsgi/CMgI0wjcCOYI7Qj5CTgJ +RAlNCVoJbQl6CYYJlAmiCaQJpgmoCaoJrQmvCbEJswnGCckJywnNCc8J0QnTCdwJ3gnpCesJ7QnvCfEJ +8wogCioKNAo+CkAKQgpECkYKSQpLCk0KTwpRClMKXApeCmEKYwrCCuQK7gsECxELJQs6C1QLcAuLC5oL +pgvFC9QL4AviC+QL5gvvC/EL8wv1C/YL+AwBDAMMDAwPDBEMEgwUDBYMGAwaDBwMHgwgDCkMQQxNDFgM +dQx3DHkMewx9DH8MgQyuDLAMsgy0DLYMuAy6DLwMvgzADMIMzAzVDN4M8g0LDQ0NDw0RDRoNHA0eDTUN +Pg1HDVUNXg1gDW8NcQ1zDXUNdw15DXsNfQ2mDbUNwg3PDdcN4g3xDfwOBw4IDgoODA4ODhcOGQ4bDiQO +LQ4vDjYOUw5fDmEOYw5lDmcOaQ5wDoEOgw6MDo4OkQ6mDq4Ouw7HDtUO1w7ZDtsO3Q7fDuYO8g7/DwcP +CQ8MDxUPGg8vDzEPMw81DzcPSQ9WD1gPWw9kD28Pgw+VD7YPuw+9D78PwQ/DD8UPyA/KD9QP6Q/rD+0P +7w/xEAoQFxAZECUQOhA8ED4QQBBCEFUQXhBnEHAQdRCDEKwQrRCvELEQsxC8EL4QxxDJEM8Q7BDuEPAQ +8hD0EPYQ/BEdER8RIREjESURJxEpEVIRUxFVEVcRWRFiEWQRbRFvEXURkhGXEZkRmxGdEZ8RoRGnEbQR +thHCEeMR5RHnEekR6xHtEe8SGBIZEhsSHRIfEigSKhIzEjUSPBJZElsSXRJfEmESZhJoEm8SkBKSEpQS +lhKYEpoSnxKhEsoSyxLNEs8S0RLaEtwS5RLnEuwTCRMLEw0TDxMRExMTGBM5EzsTPRM/E0ETQxNFE24T +bxNxE3MTdRN3E3kTfxOcE54ToBOiE6QTphOsE80TzxPRE9MT1RPXE9kUAhQDFAUUBxQJFBIUFBQdFB8U +JRRCFEQURhRIFEoUTBRSFHMUdRR3FHkUexR9FH8UiBSPFJ4UphS7FL0UvxTBFMMUzRTaFNwU4RT4FQEV +BhUVFS0VNhU/FUoVbxV4FYEVixWNFY8VkRWTFZUVlxWZFaIVuRXGFc8V2hXlFg4WEBYSFhQWFhYYFhoW +HBYlFj0WRhZIFksWTRZmFm8WeBaFFqYWqBaqFqwWrhaxFrIWtBa2Fs8XBBcZFywXQBdVF2gXbRdvF3EX +cxd1F3cXeRd+F38XgReDF4UXmhecF54XoBeiF7gX6RfrF/AX8hf0F/YX+Bf6F/0X/xgEGAsYIRhWGHwY +fhiAGIIYhBiGGIgYihiQGJkYmxieGKAYrRi1GLcYvBi+GMAYxRjHGMkY1xkDGQoZExkaGTAZPRlTGVwZ +Zxl7GYQZkRmfGasZzBnOGdAZ0hnUGdcZ2BnaGdwZ8xoUGhkaGxodGh8aIRojGigaKho3GkwaThpQGlIa +VBphGmoadRqaGqYaqBqqGqwarhqwGrEasxq1Gr4awBrFGscayRrlGv0bBhsNGxobIBs5G1obZht9G4gb +jRuPG5EbkxuWG5gbmhujG6UbphuvG7gbwxvMG9cb5RvwG/kcABwYHCEcJhw5HEIcRBxvHHEccxx1HHcc +eRx7HH0cfxyBHIMchRyHHIkcixyNHI8ckRyTHJUclxyoHLYcvxzHHMkcyxzNHM8c2BzaHNwc+B0MHRUd +HB00HUMdVB1WHVgdWh1cHY0dqh3BHcwd3h3yHgEeJh5BHloeWx5dHl4eYB5hHmMeZR5nHmgeah5rHmwe +ih6eHqceqR66Hrwevh7AHsIexB7GHsgeyh7YHt0e3x7oHu0fCR8SHxkfMB9BH0MfRR9HH0kfXh9vH3Ef +cx91H3cfgh+TH5Uflx+ZH5sfoh+zH7Uftx+5H7sfxR/WH9gf2h/cH94f7R/+IAAgAiAEIAYgIiAzIDUg +NyA5IDsgRyBYIFogXCBeIGAgeCCZIKMgrSC3INYg2CDaINwg3iDgIOIg5CEEIQohIyEwITIhNSE3IToh +PCFaIWMhaCFxIXghkCGxIbMhtSG3IbkhuyG9Ib8h3SH0IgEiAyIGIggiCyINIi4iMCIyIjQiNiI4Ijoi +PCJFIlgiWiJbImQiayKGIpMityLUIuEi4yLmIugi6yLtIwYjHyNAI0IjRCNGI0gjSiNMI04jbiOHI5Qj +liOZI5sjniOgI8EjwyPFI8cjySPLI80jzyPuJAYkEyQVJBgkGiQdJB8kQCRCJEQkRiRIJEokTCROJG0k +hSSSJJQklySZJJwkniS7JL0kvyTBJMMkxSTHJN0k6iUHJQklCyUNJQ8lESUTJTElPiVMJW0lbyVxJXMl +dSV3JXkleyWaJbIlvyXBJcQlxiXJJcsl7CXuJfAl8iX0JfYl+CX6JhkmMSY+JkAmQyZFJkgmSiZTJlUm +miacJp4moCaiJqQmpiaoJqomrCauJrAmsia0JrYmuCa6JrwmvibAJsImxCbGJsgmyibMJs4m0CbSJtQm +1ibYJtom3CblJucm6Sb3JwAnBScOJxAnVSdXJ1knWyddJ18nYSdjJ2UnZydpJ2snbSdvJ3Encyd1J3cn +eSd7J30nfyeBJ4MnhSeHJ4kniyeNJ48nkSeTJ5UnlyegJ6In6SfrJ+0n7yfxJ/Mn9Sf3J/kn+yf9J/8o +ASgDKAUoBygJKAsoDSgPKBEoEygVKBcoGSgbKB0oHyghKCMoJSgnKCkoKygtKDYoOCh/KIEogyiFKIco +iSiLKI0ojyiRKJMolSiXKJkomyidKJ8ooiilKKgoqyiuKLEotCi3KLoovSjAKMMoxijJKMwozyjSKNUo +9SkXKTcpQylQKXEpkSmvKcYp5in9Kh0qPSpUKl4qayqLKpcqrSrNKuQq+CtFK2MrgCuNK6UrwivaK/os +GCwuLEIsVixfLGEsZixoLGoscyx1LHosfCx+LIcsiSz4LPos/Cz+LQAtAi0ELQYtCC0KLQwtDi0QLRIt +FC0WLRgtGi0cLR4tIC0iLSQtJi0oLSotLC0uLTAtMi00LTYtOC06LTwtPi1ALUItRC1GLUgtSi1MLU4t +UC1SLVQtVi1YLVotXC1eLWAtYi1kLW0tby3eLeEt5C3nLeot7S3wLfMt9i35Lfwt/y4CLgUuCC4LLg4u +ES4ULhcuGi4dLiAuIy4mLikuLC4vLjIuNS44LjsuPi5BLkQuRy5KLk0uUC5TLlYuWS5cLl8uYi5lLmgu +ay5uLnEudC53LnoufS5/LoEugy6FLocuiS6LLo0ujy6RLpMunC6eLqAuoi6kLqYuqC6qLqwuri6wLrIu +tC62Lrguui68Lr4uwC7CLsQuxi7ILsouzC7OLtAu0i7ULtYu2C7aLtwu3i7gLuIu5C7mLu8u8S7yLvsu +/S7+LwcvCS8KLxMvGAAAAAAAAAICAAAAAAAABaEAAAAAAAAAAAAAAAAAAC8nA diff --git a/Spotlight/SpotlightPlaylistController.h b/Spotlight/SpotlightPlaylistController.h new file mode 100644 index 000000000..aa49fbe1c --- /dev/null +++ b/Spotlight/SpotlightPlaylistController.h @@ -0,0 +1,19 @@ +// +// SpotlightPlaylistController.h +// Cog +// +// Created by Matthew Grinshpun on 13/02/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import +#import "PlaylistController.h" +#import "SpotlightSearchController.h" + +@interface SpotlightPlaylistController : PlaylistController { + IBOutlet SpotlightSearchController * spotlightSearchController; +} + +- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard; + +@end diff --git a/Spotlight/SpotlightPlaylistController.m b/Spotlight/SpotlightPlaylistController.m new file mode 100644 index 000000000..02b6030dd --- /dev/null +++ b/Spotlight/SpotlightPlaylistController.m @@ -0,0 +1,38 @@ +// +// SpotlightPlaylistController.m +// Cog +// +// Created by Matthew Grinshpun on 13/02/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import "SpotlightPlaylistController.h" + +@implementation SpotlightPlaylistController + +// Allow drag and drop from Spotlight into main playlist +- (BOOL)tableView:(NSTableView *)tv + writeRowsWithIndexes:(NSIndexSet *)rowIndexes + toPasteboard:(NSPasteboard*)pboard +{ + [spotlightSearchController.query disableUpdates]; + + NSArray *urls = [[self selectedObjects]valueForKey:@"url"]; + [pboard declareTypes:[NSArray arrayWithObjects:CogUrlsPbboardType,nil] owner:nil]; //add it to pboard + [pboard setData:[NSArchiver archivedDataWithRootObject:urls] forType:CogUrlsPbboardType]; + + [spotlightSearchController.query enableUpdates]; + + return YES; +} + +// Do not accept drag operations, necessary as long as this class inherits from PlaylistController +- (NSDragOperation)tableView:(NSTableView*)tv + validateDrop:(id )info + proposedRow:(int)row + proposedDropOperation:(NSTableViewDropOperation)op +{ + return NSDragOperationNone; +} + +@end \ No newline at end of file diff --git a/Spotlight/SpotlightSearchController.m b/Spotlight/SpotlightSearchController.m index 6291f36d4..963549c20 100644 --- a/Spotlight/SpotlightSearchController.m +++ b/Spotlight/SpotlightSearchController.m @@ -68,8 +68,22 @@ static NSPredicate * musicOnlyPredicate = nil; - (NSPredicate *)processSearchString { + // a somewhat dumb way to collapse the whitespace in searchString + // TODO: write a more elegant way of accomplishing this + NSString * compareString = [self.searchString + stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + NSString * collapsedString = [compareString stringByReplacingOccurrencesOfString:@" " + withString:@" "]; + while (![collapsedString isEqualToString:compareString]) + { + compareString = [collapsedString copy]; + collapsedString = [compareString stringByReplacingOccurrencesOfString:@" " + withString:@" "]; + } + // break the string up into an array of each word - NSArray * searchComponents = [self.searchString + NSArray * searchComponents = [collapsedString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // create an array of all the predicates to join together @@ -125,8 +139,8 @@ static NSPredicate * musicOnlyPredicate = nil; { [self.query disableUpdates]; - NSArray *songURLs = [[playlistController selectedObjects]valueForKey:@"url"]; - [spotlightWindowController.playlistLoader addURLs:songURLs sort:NO]; + NSArray *urls = [[playlistController selectedObjects]valueForKey:@"url"]; + [spotlightWindowController.playlistLoader addURLs:urls sort:NO]; [self.query enableUpdates]; } diff --git a/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m similarity index 100% rename from SpotlightTransformers.m rename to Spotlight/SpotlightTransformers.m