From 0e6a9ee966570124456997da4e39254a2a3a6cea Mon Sep 17 00:00:00 2001 From: matthewleon Date: Mon, 11 Feb 2008 16:39:19 +0000 Subject: [PATCH] Spotlight gets all necessary tags from metadata now. Some interface tweaks. --- Cog.xcodeproj/project.pbxproj | 6 - Spotlight/SpotlightPanel.xib | 1290 ++++++++++++++-------------- Spotlight/SpotlightPlaylistEntry.h | 6 +- Spotlight/SpotlightPlaylistEntry.m | 21 +- Spotlight/SpotlightTransformers.h | 16 - Spotlight/SpotlightTransformers.m | 27 - 6 files changed, 684 insertions(+), 682 deletions(-) delete mode 100644 Spotlight/SpotlightTransformers.h delete mode 100644 Spotlight/SpotlightTransformers.m diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index dbb995619..79c665918 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -104,7 +104,6 @@ 17F561400C3BD4F30019975C /* CogAudio.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17F561330C3BD4DC0019975C /* CogAudio.framework */; }; 17F562390C3BD91B0019975C /* General.preferencePane in Resources */ = {isa = PBXBuildFile; fileRef = 17F5622E0C3BD8FB0019975C /* General.preferencePane */; }; 5604D4550D603430004F5C5D /* SpotlightSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5604D4510D603430004F5C5D /* SpotlightSearchController.m */; }; - 5604D4560D603430004F5C5D /* SpotlightTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 5604D4530D603430004F5C5D /* SpotlightTransformers.m */; }; 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 */; }; @@ -592,8 +591,6 @@ 32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cog_Prefix.pch; sourceTree = ""; }; 5604D4510D603430004F5C5D /* SpotlightSearchController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightSearchController.m; path = Spotlight/SpotlightSearchController.m; sourceTree = ""; }; 5604D4520D603430004F5C5D /* SpotlightSearchController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightSearchController.h; path = Spotlight/SpotlightSearchController.h; sourceTree = ""; }; - 5604D4530D603430004F5C5D /* SpotlightTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightTransformers.m; path = Spotlight/SpotlightTransformers.m; sourceTree = ""; }; - 5604D4540D603430004F5C5D /* SpotlightTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightTransformers.h; path = Spotlight/SpotlightTransformers.h; sourceTree = ""; }; 5604D4570D603459004F5C5D /* SpotlightPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = SpotlightPanel.xib; path = Spotlight/SpotlightPanel.xib; sourceTree = ""; }; 5604D4590D60349B004F5C5D /* SpotlightWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightWindowController.m; path = Spotlight/SpotlightWindowController.m; sourceTree = ""; }; 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightWindowController.h; path = Spotlight/SpotlightWindowController.h; sourceTree = ""; }; @@ -1092,8 +1089,6 @@ 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */, 5604D4510D603430004F5C5D /* SpotlightSearchController.m */, 5604D4520D603430004F5C5D /* SpotlightSearchController.h */, - 5604D4530D603430004F5C5D /* SpotlightTransformers.m */, - 5604D4540D603430004F5C5D /* SpotlightTransformers.h */, 5604D4F40D60726E004F5C5D /* SpotlightPlaylistEntry.h */, 5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */, ); @@ -1631,7 +1626,6 @@ 17BBE5BC0CD95CFA00258F7A /* InvertedToolbarWindow.m in Sources */, 173428F50D5FB1C400E8D854 /* EntriesController.m in Sources */, 5604D4550D603430004F5C5D /* SpotlightSearchController.m in Sources */, - 5604D4560D603430004F5C5D /* SpotlightTransformers.m in Sources */, 5604D45B0D60349B004F5C5D /* SpotlightWindowController.m in Sources */, 5604D4F60D60726E004F5C5D /* SpotlightPlaylistEntry.m in Sources */, ); diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib index 764b7388e..a44841633 100644 --- a/Spotlight/SpotlightPanel.xib +++ b/Spotlight/SpotlightPanel.xib @@ -13,7 +13,7 @@ YES com.apple.InterfaceBuilderKit - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin YES @@ -51,7 +51,7 @@ 134217728 Add to Playlist - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -99,7 +99,7 @@ YES - artist + artist 7.000000e+01 3.600000e+01 1.000000e+03 @@ -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 @@ -158,7 +158,7 @@ - album + album 7.300000e+01 3.900000e+01 1.000000e+03 @@ -173,7 +173,7 @@ 337772096 2048 - + @@ -184,14 +184,14 @@ - title + title 7.500000e+01 4.100000e+01 1.000000e+03 75628032 0 - Title + Title 3 @@ -202,7 +202,7 @@ 337772096 2048 - + @@ -228,7 +228,7 @@ 337772096 67110912 - + @@ -239,7 +239,7 @@ - year + year 4.400000e+01 1.000000e+01 1.000000e+03 @@ -254,7 +254,7 @@ 337772096 67110912 - + @@ -265,7 +265,7 @@ - genre + genre 4.400000e+01 1.000000e+01 1.000000e+03 @@ -280,7 +280,7 @@ 337772096 2048 - + @@ -306,7 +306,7 @@ 337772096 67110912 - + @@ -322,7 +322,7 @@ 6 - + gridColor 3 @@ -359,7 +359,7 @@ -2147483392 - {{0, 185}, {440, 15}} + {{0, 198}, {440, 15}} 1 @@ -413,7 +413,7 @@ 1 6 - + textBackgroundColor @@ -465,8 +465,8 @@ - 268 - {{11, 20}, {81, 17}} + 289 + {{88, 20}, {96, 17}} YES @@ -478,7 +478,7 @@ 6 - + controlColor @@ -487,7 +487,7 @@ - 268 + 289 YES @@ -496,14 +496,14 @@ NSFilenamesPboardType - {{97, 15}, {363, 22}} + {{189, 15}, {271, 26}} YES 337772033 - 131072 - + 32768 + YES @@ -522,12 +522,14 @@ YES - Title - title - year - artist - album - genre + + + + + + + length + track PlaylistEntry YES @@ -539,7 +541,7 @@ YES - SpotlightSearchController + SpotlightSearchController @@ -570,7 +572,7 @@ - value + value searchString 2 @@ -627,7 +629,7 @@ - changeSearchPath: + changeSearchPath: @@ -642,11 +644,11 @@ - value + arrangedObjects.title NSConditionallySetsEditable - + 2 @@ -666,42 +668,13 @@ arrangedObjects.year - + 2 94 - - - value: arrangedObjects.artist - - - - - - - - arrangedObjects.artist - - YES - - YES - - NSValueTransformerName - - - YES - - SpotlightArtistTransformer - - - 2 - - - 99 - value: arrangedObjects.album @@ -715,7 +688,7 @@ arrangedObjects.album - + 2 @@ -735,13 +708,73 @@ arrangedObjects.genre - + 2 102 + + + value: arrangedObjects.artist + + + + + + + value + arrangedObjects.artist + + NSConditionallySetsEditable + + + 2 + + + 104 + + + + value: arrangedObjects.length + + + + + + + + arrangedObjects.length + + + + + 2 + + + 105 + + + + value: arrangedObjects.track + + + + + + + + arrangedObjects.track + + + + + 2 + + + 107 + @@ -1068,64 +1101,64 @@ YES - + - - {{70, 101}, {480, 318}} + + {{70, 101}, {480, 318}} {196, 240} - {{70, 101}, {480, 318}} + PlaylistController - - - - + + + + - + - + - + PlaylistView - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + @@ -1149,11 +1182,51 @@ - 102 + 107 YES + + PlaylistController + DNDArrayController + + YES + + YES + clear: + clearFilterPredicate: + showEntryInFinder: + takeRepeatFromObject: + takeShuffleFromObject: + + + YES + id + + + + + + + + YES + + YES + entriesController + playlistLoader + + + YES + EntriesController + PlaylistLoader + + + + IBProjectSource + Playlist/PlaylistController.h + + EntriesController NSObject @@ -1176,10 +1249,199 @@ - IBProjectSource + Playlist/EntriesController.h + + PlaylistLoader + + + YES + + YES + + + YES + + + + playlistController + PlaylistController + + + + Playlist/PlaylistLoader.h + + + + TrackingSlider + NSSlider + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + Utils/TrackingSlider.h + + + + SpotlightSearchController + + + YES + + YES + addToPlaylist: + changeSearchPath: + + + YES + + + + + + YES + + YES + pathControl + playlistController + spotlightWindowController + + + YES + NSPathControl + NSArrayController + SpotlightWindowController + + + + + Spotlight/SpotlightSearchController.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + IBUserSource + + + + + SpotlightWindowController + NSWindowController + + YES + + YES + + + YES + + + + playlistLoader + PlaylistLoader + + + + Spotlight/SpotlightWindowController.h + + + + DNDArrayController + NSArrayController + + YES + + YES + + + YES + + + + tableView + NSTableView + + + + Playlist/DNDArrayController.h + + + + PlaylistView + NSTableView + + YES + + YES + scrollToCurrentEntry: + shufflePlaylist: + sortByPath: + toggleColumn: + + + YES + + + + + + + + YES + + YES + playbackController + playlistController + + + YES + PlaybackController + PlaylistController + + + + + Playlist/PlaylistView.h + + PlaybackController @@ -1206,22 +1468,22 @@ YES - id - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -1248,154 +1510,10 @@ - + Application/PlaybackController.h - - PlaylistController - DNDArrayController - - YES - - YES - clear: - clearFilterPredicate: - showEntryInFinder: - takeRepeatFromObject: - takeShuffleFromObject: - - - YES - - - - - - - - - YES - - YES - entriesController - playlistLoader - - - YES - EntriesController - PlaylistLoader - - - - - Playlist/PlaylistController.h - - - - SpotlightWindowController - NSWindowController - - YES - - YES - - - YES - - - - playlistLoader - PlaylistLoader - - - - Spotlight/SpotlightWindowController.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - IBUserSource - - - - - SpotlightSearchController - - - YES - - YES - addToPlaylist: - - - - YES - - - - - - YES - - YES - pathControl - playlistController - spotlightWindowController - - - YES - NSPathControl - NSArrayController - SpotlightWindowController - - - - - Spotlight/SpotlightSearchController.h - - - - DNDArrayController - NSArrayController - - YES - - YES - - - YES - - - - tableView - NSTableView - - - - Playlist/DNDArrayController.h - - @@ -1418,59 +1536,7 @@ - - ThirdParty/UKKQueue/UKMainThreadProxy.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/UKKQueue/UKFileWatcher.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - + ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h @@ -1496,33 +1562,7 @@ - - ThirdParty/AppleRemote/AppleRemote.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - + ThirdParty/UKKQueue/UKKQueue.h @@ -1548,13 +1588,39 @@ - + + ThirdParty/AppleRemote/AppleRemote.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + ThirdParty/NDHotKeys/NDHotKeyEvent.h - PlaylistLoader - + + YES @@ -1565,17 +1631,22 @@ - playlistController - PlaylistController + YES + + YES + + + YES + - - Playlist/PlaylistLoader.h + + ThirdParty/UKKQueue/UKFileWatcher.h - TrackingSlider - NSSlider + + YES @@ -1595,46 +1666,8 @@ - - Utils/TrackingSlider.h - - - - PlaylistView - NSTableView - - YES - - YES - scrollToCurrentEntry: - shufflePlaylist: - sortByPath: - toggleColumn: - - - YES - - - - - - - - YES - - YES - playbackController - playlistController - - - YES - PlaybackController - PlaylistController - - - - - Playlist/PlaylistView.h + + ThirdParty/UKKQueue/UKMainThreadProxy.h @@ -1644,238 +1677,243 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBOwALAAwAMQA1ADYAPAA9 +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBQAALAAwAMQA1ADYAPAA9 AEIAVgBXAFgAWQALAGcAbwB7AHwAlACVAJ0AngChAKIApgCsAMQAzADaAN4BBAEFAQYBBwEOARkBGgEd ASQBJQEoATIBRQFGAU0BTgFTAV0BXgFfAWMBZQFqAWsBbgFyAXsBfAGBAYIBhQGKAYsBjQGQAZkBmgGg AaEBqAGxAbIBuQG6Ab0BxAHNAc4B1QHWAd4B5wHoAe4B7wH2Af0B/gIEAgUCDAIVAhYCHAIdAiQCKAIt Ai4CMQIyAjUCNgI5AkUCRgJHAkoCUwJUARkCWAJZAlwCZQJmAngCfQJ+AokCigKLApQClQKZAqICowKk -APcCpQKpAqoCrQKxAroCuwLEAsUCygLLAs0C1wLcAt0C3gLiAuMC7gLxAvQC9wALAvgC+gL7Av4DDwMX -AxgDHAMhAyQDJQMmAysDLAMvAzQDNQM6AzsDQANWA1cDWAG5AbEB5wFFAZkB/QNhA2IDZANmA2cDbANt -A3kDegN7A3wDggB4A4QDhgOJA5EDkgOTA5kDoQOiA6MDqQOwA7EDsgOzA7oDegO7A7wDxAPFA8YDzAPU -A9UD1gPeA98D4AQDBAYEBwQJBCwEUAR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSG -BIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJoEnwTRBQMFBAUFBQYFBwUIBQkFCgULAFMFDAUN -BQ4FDwUQBRECggUSBRMFFAUVBRYFFwUYBRkFGgUbBRwFHQUeAIsBWgUfAFQFIAUhBSIFIwUkBSUFJgUn -BSgFKQUqBSsFLAUvBTIFNVUkbnVsbN8QEgANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0A -HgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jvb3RWJGNsYXNzXU5TT2JqZWN0 -c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlPaWRzVmFsdWVzXU5TQ29ubmVj -dGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5c1pOU09pZHNLZXlzXU5TTmFt -ZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9udE1hbmFnZXJfEBBOU1Zpc2li -bGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmlsaXR5T2lkc0tleXNZTlNOZXh0 -T2lkXE5TT2lkc1ZhbHVlc4ACgQE6gN2BAQaBATmAmoDigAWBAQWBAQeA44EBN4AAgAaA4YEBOBBogQEI -0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRvd0NvbnRyb2xsZXLSADcAOAA5 -ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0WE5TT2JqZWN0XxAQSUJDb2Nv -YUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgI+hAEGAB9oAQwAOAEQARQBGAEcASABJAEoASwBM -AE0ATgBPAFAAUQBSAFMAVAArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RdTlNXaW5kb3dUaXRsZVlO -U1dURmxhZ3NdTlNXaW5kb3dDbGFzc1xOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dp -bmRvd1N0eWxlTWFza1tOU1ZpZXdDbGFzc4ALgJmAmIAJEiAAAACACoAIEAIQH4AAXxAYe3sxOTYsIDE5 -Mn0sIHs0ODAsIDMxOH19XxATT3BlbiBmcm9tIFNwb3RsaWdodFdOU1BhbmVs1wBaAA4AWwBcAF0AXgBf -AGAAYQBiAGMAZABgAGZfEA9OU05leHRSZXNwb25kZXJaTlNTdWJ2aWV3c1hOU3ZGbGFnc1tOU0ZyYW1l -U2l6ZVhOU1dpbmRvd1tOU1N1cGVydmlld4AMgJeADREBAICVgAyAltIADgA+AGgAaYBepQBqAGsAbABt -AG6ADoAYgHCAhICL2ABaAA4AcABxAFwAcgBeAF8ATAB0AHUAdgB3AHgAYABMV05TRnJhbWVWTlNDZWxs -WU5TRW5hYmxlZIALgBeAD4AQEQEJCYAMgAtfEBd7ezMzNSwgMjcwfSwgezEzMSwgMzJ9fdwAfQAOAH4A -fwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAIoAjgCPAGoAkQCSAJNbTlNDZWxsRmxhZ3NfEBNOU0Fs -dGVybmF0ZUNvbnRlbnRzXxASTlNQZXJpb2RpY0ludGVydmFsXk5TQnV0dG9uRmxhZ3MyXxAPTlNLZXlF -cXVpdmFsZW50Wk5TQ29udGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9OU1BlcmlvZGljRGVs -YXlcTlNDZWxsRmxhZ3MyXU5TQnV0dG9uRmxhZ3MSBAH+AIAWgBUQGRCBgBWAEYASgA4QyBIIAAAAE/// -//+GgkD/XxAPQWRkIHRvIFBsYXlsaXN01AAOAJYAlwCYAJkAmgCbAJxWTlNTaXplVk5TTmFtZVhOU2ZG -bGFnc4AUI0AqAAAAAAAAgBMRBBRcTHVjaWRhR3JhbmRl0gA3ADgAnwCgogCgADtWTlNGb250UNIANwA4 -AKMApKQApAClAHEAO1xOU0J1dHRvbkNlbGxcTlNBY3Rpb25DZWxs0gA3ADgApwCopQCoAKkAqgCrADtY -TlNCdXR0b25ZTlNDb250cm9sVk5TVmlld1tOU1Jlc3BvbmRlct8QDwBaAK0ADgBwAK4ArwCwAFsAsQBc -AF4AXwCyALMAtABMALYAtwC4ALkAugC7ALwAvQC+AGAATADBAMIAwltOU0hTY3JvbGxlclhOU3NGbGFn -c1xOU0Nvcm5lclZpZXdfEBBOU0hlYWRlckNsaXBWaWV3XE5TU2Nyb2xsQW10c1tOU1ZTY3JvbGxlcl1O -U05leHRLZXlWaWV3XU5TQ29udGVudFZpZXeAC4BqgG+AbhECMIAkgCGAGU8QEAAAAAAAAAAAQZgAAEGY -AAARARKADIALgGaAGoAa0gAOAD4AaADGgF6lAMIAwQC2ALsAuoAagGaAaoAhgCTbAFoADgBwAM0AWwBc -AM4AXgDPAF8AswBrANEA0gBTANMA1ADVAGAA1wBrANVZTlNjdkZsYWdzWU5TRG9jVmlld1lOU0JHQ29s -b3KAGIBlgGSAGxEJAIAcgAyAOIAYgBzSAA4APgBoANyAXqEA1YAc3xAXAFoA3wAOAOAA4QDiAOMA5ACv -AOUA5gDnAFwAXQByAOgAXgAyAOkA6gBfAOsA7ADCAO4A7wDwAPEA8gDXAHgAugD2APcA+AD5APoAeAD8 -AGAA/gD/AQAAwgECAQNfEB9OU0RyYWdnaW5nU291cmNlTWFza0Zvck5vbkxvY2FsWU5TVHZGbGFnc18Q -E05TT3JpZ2luYWxDbGFzc05hbWVcTlNIZWFkZXJWaWV3XxARTlNCYWNrZ3JvdW5kQ29sb3JfEBJOU0Fs -bG93c1R5cGVTZWxlY3RfEBdOU0ludGVyY2VsbFNwYWNpbmdXaWR0aF8QGU5TQ29sdW1uQXV0b3Jlc2l6 -aW5nU3R5bGVfEBhOU0ludGVyY2VsbFNwYWNpbmdIZWlnaHReTlNBdXRvc2F2ZU5hbWVbTlNHcmlkQ29s -b3JfEBxOU0RyYWdnaW5nU291cmNlTWFza0ZvckxvY2FsXk5TVGFibGVDb2x1bW5zW05TUm93SGVpZ2h0 -gBoQAIBjE//////bwIAAgB6AIIA4CYAkI0AIAAAAAAAAEAEjQAAAAAAAAAARERKAHwmAYoAMgB2AXxAP -gBqAJyNAMQAAAAAAAFxQbGF5bGlzdFZpZXdbTlNUYWJsZVZpZXdaezQ0MCwgMTk2fdcAWgAOAFwAXQBe -AF8BBQC7AQkAYwEKAGAAuwDVgCGAI4AigAyAIYAc2wBaAA4AzQBbAFwAXQDOAF4AzwBfALMAawDRAREB -EgDUARMA8gBgANcAawDygBiAZRAEgGyAbYAggAyAOIAYgCBZezQ0MCwgMTd90gA3ADgBGwEcpAEcAKoA -qwA7XxARTlNUYWJsZUhlYWRlclZpZXfWAFoADgBwAFwAXgBfAGsBHwEgASEAYABrgBiAJoAlE/////+A -AAEAgAyAGF8QFHt7LTI2LCAwfSwgezE2LCAxN3190gA3ADgBJgEnpAEnAKoAqwA7XV9OU0Nvcm5lclZp -ZXfSAA4APgBoASqAXqcBKwEsAS0BLgEvATABMYAogD+ARIBKgE+AVIBZ2gEzAA4BNAE1ATYBNwE4ATkB -OgEFAHgBPAE9AT4BPwFAAUEBQgFDANVeTlNJc1Jlc2l6ZWFibGVcTlNIZWFkZXJDZWxsXE5TSWRlbnRp -ZmllcldOU1dpZHRoWk5TRGF0YUNlbGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdpZHRo -CYA+gCqAKSNAUYAAAAAAAIA2EAMjQEIAAAAAAAAjQI9AAAAAAACAHFZhcnRpc3TXAH0ADgDjAIIAgwCG -AUcAiAFIAUkBSgFLAO4BTFtOU1RleHRDb2xvcoA1gC2AK4AsgDJWQXJ0aXN01AAOAJYAlwCYAJkBUACb -AVKAFCNAJgAAAAAAAIATEQwc1QAOAVQBVQFWAVcBWAFZAVoBWwFcV05TQ29sb3JcTlNDb2xvclNwYWNl -W05TQ29sb3JOYW1lXU5TQ2F0YWxvZ05hbWWAMYAwEAaAL4AuVlN5c3RlbVtoZWFkZXJDb2xvctMADgFV -AWABWAFBAWJXTlNXaGl0ZYAxQjEA0gA3ADgBZAFUogFUADvVAA4BVAFVAVYBVwFYAWcBWgFoAVyAMYA0 -gDOALl8QD2hlYWRlclRleHRDb2xvctMADgFVAWABWAFBAW2AMUIwANIANwA4AW8BcKUBcAFxAKUAcQA7 -XxARTlNUYWJsZUhlYWRlckNlbGxfEA9OU1RleHRGaWVsZENlbGzYAH0ADgDjAIIAgwCEAIYBRwFzAXQA -1wF2AI8A1QF5AXoSFCH+QIA9gDiAN4ASgBwRCACAO1lUZXh0IENlbGzVAA4BVAFVAVYBVwFYAX4BWgF/ -AVyAMYA6gDmALl8QFmNvbnRyb2xCYWNrZ3JvdW5kQ29sb3LTAA4BVQFgAVgBQQGEgDFLMC42NjY2NjY2 -OQDVAA4BVAFVAVYBVwFYAWcBWgGIAVyAMYA0gDyALl8QEGNvbnRyb2xUZXh0Q29sb3LSADcAOAGMAXGk -AXEApQBxADvSADcAOAGOAY+iAY8AO11OU1RhYmxlQ29sdW1u2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgB -PAGTAZQBlQGWAUEBlwFDANUJgD6AQYBAI0BSQAAAAAAAgEMjQEOAAAAAAACAHFVhbGJ1bdcAfQAOAOMA -ggCDAIYBRwCIAUgBSQGdAUsA7gFMgDWALYBCgCyAMlVBbGJ1bdgAfQAOAOMAggCDAIQAhgFHAXMBdADX -AXYAjwDVAXkBeoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwBqwGsAa0BrgFBAa8B -QwDVCYA+gEaARSNAUsAAAAAAAIBJI0BEgAAAAAAAgBxVdGl0bGXXAH0ADgDjAIIAgwCGAUcBswFIAbUB -tgFLAO4BTBIEgf4AgDWASIBHgCyAMlVUaXRsZdMADgFVAWABWAFBAbyAMUswLjMzMzMzMjk5ANgAfQAO -AOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAXkBeoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToB -BQB4ATwBxwHIAckBygFBAcsBQwDVCYA+gEyASyNAUqewAAAAAIBOI0BET2AgAAAAgBxWbGVuZ3Ro1wB9 -AA4A4wCCAIMAhgFHAIgBSAFJAdEBSwHTAUyANYAtgE2ALBIEAAAAgDJWTGVuZ3Ro2AB9AA4A4wCCAIMA -hACGAUcBcwF0ANcBdgCPANUB3AF6gD2AOIA3gBKAHBIEAAgAgDvaATMADgE0ATUBNgE3ATgBOQE6AQUA -eAE8AeEB4gHjAeQBQQHlAUMA1QmAPoBRgFAjQEYAAAAAAACAUyNAJAAAAAAAAIAcVHllYXLXAH0ADgDj -AIIAgwCGAUcAiAFIAUkB6wFLAdMBTIA1gC2AUoAsgDJUWWVhctgAfQAOAOMAggCDAIQAhgFHAXMBdADX -AXYAjwDVAdwBeoA9gDiAN4ASgByAO9oBMwAOATQBNQE2ATcBOAE5AToBBQB4ATwB+QH6AeMB+wFBAeUB -QwDVCYA+gFaAVYBYgBxVZ2VucmXXAH0ADgDjAIIAgwCGAUcAiAFIAUkCAQFLAO4BTIA1gC2AV4AsgDJV -R2VucmXYAH0ADgDjAIIAgwCEAIYBRwFzAXQA1wF2AI8A1QF5AXqAPYA4gDeAEoAcgDvaATMADgE0ATUB -NgE3ATgBOQE6AQUAeAE8Ag8CEAIRAhIBQQITAUMA1QmAPoBbgFojQEMAAAAAAACAXSNAEAAAAAAAAIAc -VXRyYWNr1wB9AA4A4wCCAIMAhgFHAIgBSAFJAhkBSwHTAUyANYAtgFyALIAyVVRyYWNr2AB9AA4A4wCC -AIMAhACGAUcBcwF0ANcBdgCPANUB3AF6gD2AOIA3gBKAHIA70gA3ADgCJQImowImAicAO15OU011dGFi -bGVBcnJheVdOU0FycmF51QAOAVQBVQFWAVcBWAIqAVoCKwFcgDGAYYBggC5ZZ3JpZENvbG9y0wAOAVUB -YAFYAUECMIAxRDAuNQBfEBRDb2dTcG90bGlnaHRQbGF5bGlzdNIANwA4AjMCNKICNAA7Xk5TQ2xhc3NT -d2FwcGVyXxAVe3swLCAxN30sIHs0NDAsIDE5Nn190gA3ADgCNwI4pAI4AKoAqwA7Wk5TQ2xpcFZpZXfZ -AFoCOgAOAHAAXABeAjsAXwI8AGsAawI/AkABIQBgAkIAawJEWE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVy -Y2VudIAYgBiAaYBngAyAaIAYIz/qN4SgAAAAXxAUe3s4NSwgMTd9LCB7MTUsIDY4fX1cX2RvU2Nyb2xs -ZXI60gA3ADgCSAJJpQJJAKkAqgCrADtaTlNTY3JvbGxlctoAWgI6AA4AcACuAFwAXgI7AF8CPABrAGsC -PwJOAPcBIQBgAkIAawJSgBiAGIBpgGuADIBogBgjP+oGoAAAAABfEBV7ezAsIDE4NX0sIHs0NDAsIDE1 -fX3SAA4APgBoAlaAXqEA8oAgXxAWe3syMCwgNDV9LCB7NDQwLCAyMTN9fdIANwA4AloCW6QCWwCqAKsA -O1xOU1Njcm9sbFZpZXfYAFoADgBwAHEAXAByAF4AXwBMAl4CXwJgAmEAeABgAEyAC4CDgHGAchEBCgmA -DIALXxAWe3syMCwgMjc4fSwgezMxMywgMjJ9fd0AfQAOAmcA4wCCAIMAhACGAmgCaQJqAmsBRwJsAm0C -bgJvAIoAjwBsAnMA9wB4AnUCdgF6XxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHls -ZV8QEU5TRHJhd3NCYWNrZ3JvdW5kXxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50 -cxIUcf5AgIKAeIBzgBWAEoBwEhAABAAJgHUQ/4A71QAOAVQBVQFWAVcBWAFZAVoCewFcgDGAMIB0gC5f -EBN0ZXh0QmFja2dyb3VuZENvbG9y3AI6AH0ADgB/AIAAgQCCAIQAhQCGAjsAhwJgAoAAiQKCAO4AigKE -AGwChgDuAocCiIByEgAB/gCAFhBLgBWAdoBwEQGQgHcSCERA/1ZzZWFyY2hfEBNfc2VhcmNoRmllbGRT -ZWFyY2g63QI6AH0ADgB/AIAAgQKMAIIAhACFAIYCOwCHAmACgACJAoIA7gCKApACkQBsAoYA7gKTAohf -ECNOU0FjY2Vzc2liaWxpdHlPdmVycmlkZGVuQXR0cmlidXRlc4BygBaAFYB6gHmAcICBVWNsZWFy0gAO -AD4AaAKXgF6hApiAe9MADgKaAD4CmwKcAp9XTlMua2V5c4CAogKdAp6AfIB9ogKgAqGAfoB/XUFYRGVz -Y3JpcHRpb25fEClOU0FjY2Vzc2liaWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzS -ADcAOAKmAqejAqcCqAA7XxATTlNNdXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNo -RmllbGRDYW5jZWw60gA3ADgCqwKspQKsAXEApQBxADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4Aq4C -r6YCrwKwAKkAqgCrADtdTlNTZWFyY2hGaWVsZFtOU1RleHRGaWVsZNgAWgAOAHAAcQBcAHIAXgBfAEwC -swK0ArUCtgB4AGAATIALgIqAhYCGEQEMCYAMgAtfEBR7ezExLCAyMH0sIHs4MSwgMTd9fdgAfQAOAOMA -ggCDAIQAhgFHArwBdAK+Ar8AjwBtAsIBehIEAf5AgD2AiICHgBKAhBIQQAQAgDtcU2VhcmNoIFBhdGg6 -1QAOAVQBVQFWAVcBWAF+AVoCyAFcgDGAOoCJgC5cY29udHJvbENvbG9y0gA3ADgCzAKwpQKwAKkAqgCr -ADvZAFoADgBwAHECzgBcAHIAXgBfAEwC0ALRAtIC0wK2AHgAYABMW05TRHJhZ1R5cGVzgAuAlICQgJGA -jAmADIAL0gAOAD4APwLZgI+iAtoC24CNgI5fEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNG -aWxlbmFtZXNQYm9hcmRUeXBl0gA3ADgC3wLgowLgAuEAO1xOU011dGFibGVTZXRVTlNTZXRfEBV7ezk3 -LCAxNX0sIHszNjMsIDIyfX3YAuQAfQAOAIMAhACGAuUC5gBTAucC6AFLAG4C6wLsAG5bTlNQYXRoU3R5 -bGVfEBROU1BhdGhDb21wb25lbnRDZWxsc1pOU0RlbGVnYXRlEhQh/gGAk4AsgIsSAAIAAICSgIvSAA4A -PgBoAvCAXqDSADcAOALyAvOkAvMApQBxADtaTlNQYXRoQ2VsbNIANwA4AvUC9qUC9gCpAKoAqwA7XU5T -UGF0aENvbnRyb2xaezQ4MCwgMzE4fdIANwA4AvkAqqMAqgCrADtfEBV7ezAsIDB9LCB7MTI4MCwgNzc4 -fX3SADcAOAL8Av2iAv0AO18QEE5TV2luZG93VGVtcGxhdGXSAA4APgBoAwCAXq4DAQMCAwMDBAMFAwYD -BwMIAwkDCgMLAwwDDQMOgJuAnoCigKWAp4CpgLiAuoDDgMeAy4DPgNOA19QADgMQAxEDEgMTAGwAQQMW -XU5TRGVzdGluYXRpb25YTlNTb3VyY2VXTlNMYWJlbICdgHCAB4CcXxAVaW5pdGlhbEZpcnN0UmVzcG9u -ZGVy0gA3ADgDGQMaowMaAxsAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9yXk5TTmliQ29ubmVjdG9y1AAO -AxADEQMSAxMAHwMfAyCAnYACgJ+AodIADgAyADMDI4AEgKBfEBlTcG90bGlnaHRTZWFyY2hDb250cm9s -bGVyXxAZc3BvdGxpZ2h0V2luZG93Q29udHJvbGxlctQADgMQAxEDEgMnAx8AagMqgKSAn4AOgKNeYWRk -VG9QbGF5bGlzdDrSADcAOAMtAy6jAy4DGwA7XxAVTlNOaWJDb250cm9sQ29ubmVjdG9y1AAOAxADEQMS -AxMAQQAfAzOAnYAHgAKAplZ3aW5kb3fUAA4DEAMRAxIDEwBuAx8DOYCdgIuAn4CoW3BhdGhDb250cm9s -1AAOAxADEQMSAxMDPQMfAz+AnYCqgJ+At9wDQQAOA0IA4QNDA0QDRQNGA0cAMgNIA0kAeADvAHgDTQB4 -A08DUANRAHgDUwB4AHhfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2Vs -ZWN0aW9uWk5TRWRpdGFibGVfEA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0Rl -Y2xhcmVkS2V5c18QIk5TQ2xlYXJzRmlsdGVyUHJlZGljYXRlT25JbnNlcnRpb25fEBhOU1NlbGVjdHNJ -bnNlcnRlZE9iamVjdHNfEBZOU0F2b2lkc0VtcHR5U2VsZWN0aW9uCYBjCYCsCYC1gLSArQmAqwkJXxAS -UGxheWxpc3RDb250cm9sbGVyXxARTlNBcnJheUNvbnRyb2xsZXLSAA4APgBoA1qAXqYDWwNcA10DXgNf -A2CAroCvgLCAsYCygLNdUGxheWxpc3RFbnRyedEADgNjgLbSADcAOANlA0SiA0QAO18QEnBsYXlsaXN0 -Q29udHJvbGxlctQADgMQAxEDEgMnAx8AbgNrgKSAn4CLgLlfEBFjaGFuZ2VTZWFyY2hQYXRoOtgADgMQ -A24DbwMRAxIDcANxA3IDPQN0A3UBLwN3A3gAU1lOU0tleVBhdGhZTlNCaW5kaW5nWU5TT3B0aW9uc18Q -HE5TTmliQmluZGluZ0Nvbm5lY3RvclZlcnNpb26AwoCqgL2AvIBPgLuAvl8QG3ZhbHVlOiBhcnJhbmdl -ZE9iamVjdHMueWVhclV2YWx1ZV8QFGFycmFuZ2VkT2JqZWN0cy55ZWFy0wAOApoAPgN9A34DgIDBoQN/ -gL+hA4GAwF8QG05TQ29uZGl0aW9uYWxseVNldHNFZGl0YWJsZQnSADcAOAOFAqiiAqgAO9IANwA4A4cD -iKMDiAMbADtfEBVOU05pYkJpbmRpbmdDb25uZWN0b3LYAA4DEANuA28DEQMSA3ADcQNyAz0DjAN1AS0D -jwOQAFOAwoCqgMWAvIBEgMSAxl8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMudGl0bGVfEBVhcnJhbmdl -ZE9iamVjdHMudGl0bGXTAA4CmgA+A30DlQOXgMGhA3+Av6EDgYDA2AAOAxADbgNvAxEDEgNwA3EDcgM9 -A5wDdQEwA58DoABTgMKAqoDJgLyAVIDIgMpfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmdlbnJlXxAV -YXJyYW5nZWRPYmplY3RzLmdlbnJl0wAOApoAPgN9A6UDp4DBoQN/gL+hA4GAwNcADgMQA24DbwMRAxID -cQNyAx8DrAOtAz0DrwBTgMKAn4DOgM2AqoDMXxAbY29udGVudEFycmF5OiBxdWVyeS5yZXN1bHRzXGNv -bnRlbnRBcnJheV1xdWVyeS5yZXN1bHRz1wAOAxADbgNvAxEDEgNxA3IDHwO2A7cCYAO5AFOAwoCfgNKA -0YBygNBfEBN2YWx1ZTogc2VhcmNoU3RyaW5nXHNlYXJjaFN0cmluZ9gADgMQA24DbwMRAxIDcANxA3ID -PQO/A3UBLAPCA8MAU4DCgKqA1YC8gD+A1IDWXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hbGJ1bV8Q -FWFycmFuZ2VkT2JqZWN0cy5hbGJ1bdMADgKaAD4DfQPIA8qAwaEDf4C/oQOBgMDYAA4DEANuA28DEQMS -A3ADcQNyAz0DzwN1ASsD0gPTAFOAwoCqgNmAvIAogNiA2l8QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMu -YXJ0aXN0XxAWYXJyYW5nZWRPYmplY3RzLmFydGlzdNMADgKaAD4DfQPYA9uAwaID2QN/gNuAv6ID3AOB -gNyAwF8QFk5TVmFsdWVUcmFuc2Zvcm1lck5hbWVfEBpTcG90bGlnaHRBcnRpc3RUcmFuc2Zvcm1lctIA -DgA+A+ED4oDgrxAgAEECEgFAAMEBLQBsA+kATAMfALYBlgHKASwC0gBrATEBMAM9AG0BLgDyAHYBrgEv -AmABKwDVAfsB5ABqArUAboAHgF2ANoBmgESAcIDegAuAn4BqgEOAToA/gJGAGIBZgFSAqoCEgEqAIIAQ -gEmAT4BygCiAHIBYgFOADoCGgIvSAA4AMgAzBAWABIDfXU5TQXBwbGljYXRpb27SADcAOAQIAieiAicA -O9IADgA+A+EEC4DgrxAgAB8BMQErAGsA1QBMAB8AQQAfAGsBLAEuANUAbgBMANUA1QAfAEwA1QBrAGoB -LQDVAGwA1QBrATABLwBMAG0ATIACgFmAKIAYgByAC4ACgAeAAoAYgD+ASoAcgIuAC4AcgByAAoALgByA -GIAOgESAHIBwgByAGIBUgE+AC4CEgAvSAA4APgPhBC6A4K8QIQBBAhIBQABsAMEBLQPpAx8ATAC2AZYB -ygEsAtIBMAExAGsDPQAfAG0BLgDyAHYCYAEvAa4BKwDVAfsAbgBqArUB5IAHgF2ANoBwgGaARIDegJ+A -C4BqgEOAToA/gJGAVIBZgBiAqoACgISASoAggBCAcoBPgEmAKIAcgFiAi4AOgIaAU9IADgA+A+EEUoDg -rxAhBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4E -bwRwBHEEcgRzgOSA5YDmgOeA6IDpgOqA64DsgO2A7oDvgPCA8YDygPOA9ID1gPaA94D4gPmA+oD7gPyA -/YD+gP+BAQCBAQGBAQKBAQOBAQRfEBtQYW5lbCAoT3BlbiBmcm9tIFNwb3RsaWdodClfEB1UZXh0IEZp -ZWxkIENlbGwgKFRleHQgQ2VsbCktMl8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS02XFNlYXJj -aCBGaWVsZF8QEVZlcnRpY2FsIFNjcm9sbGVyXxAUVGFibGUgQ29sdW1uICh0aXRsZSlbQXBwbGljYXRp -b25fEBtTcG90bGlnaHQgU2VhcmNoIENvbnRyb2xsZXJcQ29udGVudCBWaWV3XxATSG9yaXpvbnRhbCBT -Y3JvbGxlcl8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0xXxAdVGV4dCBGaWVsZCBDZWxsIChU -ZXh0IENlbGwpLTRfEBRUYWJsZSBDb2x1bW4gKGFsYnVtKVlQYXRoIENlbGxfEBRUYWJsZSBDb2x1bW4g -KGdlbnJlKV8QFFRhYmxlIENvbHVtbiAodHJhY2spW1Njcm9sbCBWaWV3XxATUGxheWxpc3QgQ29udHJv -bGxlclxGaWxlJ3MgT3duZXJfEBpTdGF0aWMgVGV4dCAoU2VhcmNoIFBhdGg6KV8QFVRhYmxlIENvbHVt -biAobGVuZ3RoKV8QEVRhYmxlIEhlYWRlciBWaWV3XxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlz -dClfEBFTZWFyY2ggRmllbGQgQ2VsbF8QE1RhYmxlIENvbHVtbiAoeWVhcilfEBtUZXh0IEZpZWxkIENl -bGwgKFRleHQgQ2VsbClfEBVUYWJsZSBDb2x1bW4gKGFydGlzdClfEEBQbGF5bGlzdCBWaWV3IChBcnRp -c3QsIEFsYnVtLCBUaXRsZSwgTGVuZ3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXxAdVGV4dCBGaWVsZCBD -ZWxsIChUZXh0IENlbGwpLTNfEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QHVB1c2ggQnV0dG9u -IChBZGQgdG8gUGxheWxpc3QpXxAeVGV4dCBGaWVsZCBDZWxsIChTZWFyY2ggUGF0aDopXxAdVGV4dCBG -aWVsZCBDZWxsIChUZXh0IENlbGwpLTXSAA4APgPhBJeA4KIA1QM9gByAqtIADgA+A+EEnIDgogD+A1OA -HYCr0gAOAD4D4QShgOCvEC8DDgBBAhIBQAMJAMEBLQBsA+kDAQBMAx8DBQC2AZYDBwMEAwYBygMLASwC -0gBrATEBMAM9AwgAHwBtAwoBLgDyAHYBrgEvAmADDAErAwIDAwDVAfsDDQHkAGoCtQBugNeAB4BdgDaA -w4BmgESAcIDegJuAC4CfgKeAaoBDgLiApYCpgE6Ay4A/gJGAGIBZgFSAqoC6gAKAhIDHgEqAIIAQgEmA -T4BygM+AKICegKKAHIBYgNOAU4AOgIaAi9IADgA+A+EE04DgrxAvBNQCoQTWBNcE2ATZBNoE2wTcBN0E -3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE -/AT9BP4E/wUABQEFAoEBCYB/gQEKgQELgQEMgQENgQEOgQEPgQEQgQERgQESgQETgQEUgQEVgQEWgQEX -gQEYgQEZgQEagQEbgQEcgQEdgQEegQEfgQEggQEhgQEigQEjgQEkgQElgQEmgQEngQEogQEpgQEqgQEr -gQEsgQEtgQEugQEvgQEwgQExgQEygQEzgQE0gQE1gQE2EGMQLBAnEF0QGxAkEDcT//////////0QPRAR -EFoQGhAoEFsQSBApEC0QIRBZEBgQHRAeEBAQXhBnEE8QZhAgECUQOBA6ECIQTBBKEBwQKxBlECoQBRBQ -EFjSAA4APgBoBS6AXqDSAA4APgPhBTGA4KDSAA4APgPhBTSA4KDSADcAOAU2BTeiBTcAO15OU0lCT2Jq -ZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYC4ALmAzEDOAM/A00DXwN7A4kDlQOhA68DugPIA+QD -8gQFBBcEMQQ7BEgESgRNBE8EUgRVBFcEWQRbBF4EYQRjBGYEaARqBGwEbwRxBHQEfQSJBIsEjQSpBLIE -uwTGBMsE2gTjBPYE/wUKBQwFDwURBToFRwVUBWIFbAV6BYcFmQWtBbkFuwW9Bb8FwQXGBcgFygXMBc4F -0AXrBgEGCQYmBjgGQwZMBlgGYQZtBm8GcQZzBnYGeAZ6BnwGhQaHBpIGlAaWBpgGmgacBr0GxQbMBtYG -2AbaBtwG3gbhBuIG5AbmBwAHMQc9B1MHaAd3B4kHlAeeB6wHvgfLB9kH3gfgB+IH5AfmB+gH6gfsB+4H -8Af1B/4IEAghCCgILwg4CDoIQwhFCEgIVQheCGMIaghrCHQIfQiKCJcIoAirCLQIvgjFCNEJEAkcCSUJ -MglFCVIJXglsCXoJfAl+CYAJggmFCYcJiQmLCZ4JoQmjCaUJpwmpCasJtAm2CcEJwwnFCccJyQnLCfgK -AgoMChYKGAoaChwKHgohCiMKJQonCikKKwo0CjYKOQo7CpoKvArGCtwK6Qr9CxILLAtIC2MLcgt+C50L -rAu4C7oLvAu+C8cLyQvLC80LzgvQC9kL2wvkC+cL6QvqC+wL7gvwC/IL9Av2C/gMAQwODBoMJQxCDEQM -RgxIDEoMTAxODHsMfQx/DIEMgwyFDIcMiQyLDI0MjwyZDKIMqwy/DNgM2gzcDN4M5wzpDOsNAg0LDRQN -Ig0rDS0NPA0+DUANQg1EDUYNSA1KDXMNgg2PDZwNpA2vDb4NyQ3UDdUN1w3ZDdsN5A3mDegN8Q36DfwO -Aw4gDiwOLg4wDjIONA42Dj0OTg5QDlkOWw5eDnMOew6IDpQOog6kDqYOqA6qDqwOsw6/DswO1A7WDtkO -4g7nDvwO/g8ADwIPBA8WDyMPJQ8oDzEPPA9QD2IPgw+ID4oPjA+OD5APkg+VD5cPoQ+2D7gPug+8D74P -1w/kD+YP8hAHEAkQCxANEA8QIhArEDQQPRBCEFAQeRB6EHwQfhCAEIkQixCUEJYQnBC5ELsQvRC/EMEQ -wxDJEOoQ7BDuEPAQ8hD0EPYRHxEgESIRJBEmES8RMRE6ETwRQhFfEWQRZhFoEWoRbBFuEXQRgRGDEY8R -sBGyEbQRthG4EboRvBHlEeYR6BHqEewR9RH3EgASAhIJEiYSKBIqEiwSLhIzEjUSPBJdEl8SYRJjEmUS -ZxJsEm4SlxKYEpoSnBKeEqcSqRKyErQSuRLWEtgS2hLcEt4S4BLlEwYTCBMKEwwTDhMQExITOxM8Ez4T -QBNCE0QTRhNME2kTaxNtE28TcRNzE3kTmhOcE54ToBOiE6QTphPPE9AT0hPUE9YT3xPhE+oT7BPyFA8U -ERQTFBUUFxQZFB8UQBRCFEQURhRIFEoUTBRVFFwUaxRzFIgUihSMFI4UkBSaFKcUqRSuFMUUzhTTFOIU -+hUDFQwVFxU8FUUVThVYFVoVXBVeFWAVYhVkFWYVbxWGFZMVnBWnFbIV2xXdFd8V4RXjFeUV5xXpFfIW -ChYTFhUWGBYaFjMWPBZFFlIWcxZ1FncWeRZ7Fn4WfxaBFoMWnBbRFuYW+RcNFyIXNRc6FzwXPhdAF0IX -RBdGF0sXTBdOF1AXUhdnF2kXaxdtF28XhRe2F7gXvRe/F8EXwxfFF8cXyhfMF9EX2BfuGCMYSRhLGE0Y -TxhRGFMYVRhXGF0YZhhoGGsYbRh6GIIYhBiJGIsYjRiSGJQYlhikGNAY1xjgGOcY/RkKGSAZKRk0GUgZ -URleGWwZeBmZGZsZnRmfGaEZpBmlGacZqRnAGeEZ5hnoGeoZ7BnuGfAZ9Rn3GgQaGRobGh0aHxohGi4a -NxpCGmcacxp1GncaeRp7Gn0afhqAGoIaixqNGpIalBqWGrIayhrTGtoa5xrtGwUbJhsyG0kbVBtZG1sb -XRtfG2QbZhtoG3Ebcxt0G30bhhuRG5obpRuzG74bxxvOG+Yb7xv0HAccEBwSHC8cMRwzHDUcNxw5HDsc -PRw/HEEcQxxFHEccSRxLHFwcahxzHHscfRx/HIEcgxybHKQcqxzCHNEc4hzkHOYc6BzqHPMc9Rz3HRMd -Lx1AHUIdRB1GHUgdVx1gHWcdfx2QHZIdlB2WHZgdnx2wHbIdtB22HbgdxB3VHdcd2R3bHd0eDh4rHkIe -TR5fHnMegh6nHsIe2x7cHt4e3x7hHuIe5B7mHuge6R7rHuwe7R8CHxYfHx8hHy4fMB8yHzQfNh84Hzof -SB9NH08fWB9dH3Ifgx+FH4cfiR+LH58fwB/KH9Qf3h/9H/8gASADIAUgByAJIAsgKSAvIEYgUyBVIFgg -WiBdIF8gfSB+IIcgjCCVIJwgtCDVINcg2SDbIN0g3yDhIOMhAiEaISchKSEsIS4hMSEzIVQhViFYIVoh -XCFeIWAhYiGBIZkhpiGoIashrSGwIbIhzyHRIdMh1SHXIdkh2yH5IgYiFCIxIjMiNSI3IjkiOyI9IlMi -YCKBIoMihSKHIokiiyKNIo8iriLGItMi1SLYItoi3SLfIwAjAiMEIwYjCCMKIwwjDiMuI0cjVCNWI1sj -XSNfI2QjZiNoI4EjniOnI6kj7CPuI/Aj8iP0I/Yj+CP6I/wj/iQAJAIkBCQGJAgkCiQMJA4kECQSJBQk -FiQYJBokHCQeJCAkIiQkJCYkKCQqJCwkNSQ3JDkkRyRQJFUkXiRgJKMkpSSnJKkkqyStJK8ksSSzJLUk -tyS5JLskvSS/JMEkwyTFJMckySTLJM0kzyTRJNMk1STXJNkk2yTdJN8k4STjJOwk7iUzJTUlNyU5JTsl -PSU/JUElQyVFJUclSSVLJU0lTyVRJVMlVSVXJVklWyVdJV8lYSVjJWUlZyVpJWslbSVvJXElcyV1JX4l -gCXFJcclySXLJc0lzyXRJdMl1SXXJdkl2yXdJd8l4SXjJeUl5yXpJesl7SXvJfEl8yX1Jfcl+SX7Jf0m -ACYDJgYmCSYMJiomSiZqJncmiyaiJq4mzCbZJu8nDycvJ0YnUCdnJ34niiegJ60nyifiJ/YoFigqKEAo -Xih2KLko2Sj2KRYpNylXKWApYilnKWkpayl0KXYpeyl9KX8piCmKKesp7SnvKfEp8yn1Kfcp+Sn7Kf0p -/yoBKgMqBSoHKgkqCyoNKg8qESoTKhUqFyoZKhsqHSofKiEqIyolKicqKSorKi0qLyoxKjMqNSo3Kjkq -Oyo9Kj8qQSpDKkUqRypJKlIqVCq1Krgquiq9KsAqwyrGKskqzCrPKtIq1SrYKtsq3irhKuQq5yrqKu0q -8CrzKvYq+Sr8Kv8rAisFKwgrCysOKxErFCsXKxorHSsgKyMrJispKywrLysyKzUrOCs7Kz4rQStDK0Ur -RytJK0srTStPK1grWitcK14rYCtiK2QrZitoK2orbCtuK3Arcit0K3YreCt6K3wrfiuAK4IrhCuGK4gr -iiuMK44rkCuSK5QrliuYK5oroyulK6YrryuxK7Iruyu9K74rxyvMAAAAAAAAAgIAAAAAAAAFOAAAAAAA -AAAAAAAAAAAAK9s +APcCpQKpAqoCrQKxAroCuwLEAsUCygLLAs0C1wLcAt0C3gLiAuMC7gLxAvQC9wALAvgC+gL7Av4DEQMZ +AxoDHgMjAyYDJwMoAy0DLgMxAzYDTANNA04BzQIVA1kDWgNcA14DXwNkA2UDagNrA3ADcQN9A34DfwOA +A4YDhwOJA4wDkwOUA5UDlgOdA54DnwOnA6gDqQOvA7cDfgO4A7kDhgB4A8ADyAPJA8oD0APYA9kD2gPg +A+gD6QPqA/AD+AP5A/oEAAQjBCYEJwQpBEwEcASUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSj +BKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLoEvwTzBScFKAUpBSoFKwUsBS0FLgUv +BTAFMQUyBTMFNAU1BTYFNwU4BTkFOgBUBTsFPABTBT0BWgU+BT8FQAVBBUIFQwVEBUUFRgCLBUcFSAVJ +BUoFSwVMBU0FTgKCBU8FUAVRBVIFVQVYBVtVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUAFgAXABgA +GQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290ViRjbGFz +c11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVl +c11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRz +S2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2Vy +XxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0eU9pZHNL +ZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEBP4DggQEJgQE+gJqA5YAFgQEIgQEKgOaBATyAAIAG +gOSBAT0QbYEBC9IADgAyADMANFtOU0NsYXNzTmFtZYAEgANfEBlTcG90bGlnaHRXaW5kb3dDb250cm9s +bGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVj +dF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2JqZWN0c4CPoQBBgAfaAEMADgBEAEUARgBH +AEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAK1xOU1dpbmRvd1ZpZXdcTlNTY3JlZW5SZWN0XU5TV2lu +ZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xhc3NcTlNXaW5kb3dSZWN0XxAPTlNXaW5kb3dCYWNr +aW5nXxARTlNXaW5kb3dTdHlsZU1hc2tbTlNWaWV3Q2xhc3OAC4CZgJiACRIgAAAAgAqACBACEB+AAF8Q +GHt7MTk2LCAxOTJ9LCB7NDgwLCAzMTh9fV8QE09wZW4gZnJvbSBTcG90bGlnaHRXTlNQYW5lbNcAWgAO +AFsAXABdAF4AXwBgAGEAYgBjAGQAYABmXxAPTlNOZXh0UmVzcG9uZGVyWk5TU3Vidmlld3NYTlN2Rmxh +Z3NbTlNGcmFtZVNpemVYTlNXaW5kb3dbTlNTdXBlcnZpZXeADICXgA0RAQCAlYAMgJbSAA4APgBoAGmA +XqUAagBrAGwAbQBugA6AGIBwgISAi9gAWgAOAHAAcQBcAHIAXgBfAEwAdAB1AHYAdwB4AGAATFdOU0Zy +YW1lVk5TQ2VsbFlOU0VuYWJsZWSAC4AXgA+AEBEBCQmADIALXxAXe3szMzUsIDI3MH0sIHsxMzEsIDMy +fX3cAH0ADgB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACKAI4AjwBqAJEAkgCTW05TQ2VsbEZs +YWdzXxATTlNBbHRlcm5hdGVDb250ZW50c18QEk5TUGVyaW9kaWNJbnRlcnZhbF5OU0J1dHRvbkZsYWdz +Ml8QD05TS2V5RXF1aXZhbGVudFpOU0NvbnRlbnRzWU5TU3VwcG9ydF1OU0NvbnRyb2xWaWV3XxAPTlNQ +ZXJpb2RpY0RlbGF5XE5TQ2VsbEZsYWdzMl1OU0J1dHRvbkZsYWdzEgQB/gCAFoAVEBkQgYAVgBGAEoAO +EMgSCAAAABP/////hoJA/18QD0FkZCB0byBQbGF5bGlzdNQADgCWAJcAmACZAJoAmwCcVk5TU2l6ZVZO +U05hbWVYTlNmRmxhZ3OAFCNAKgAAAAAAAIATEQQUXEx1Y2lkYUdyYW5kZdIANwA4AJ8AoKIAoAA7Vk5T +Rm9udFDSADcAOACjAKSkAKQApQBxADtcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4AKcAqKUA +qACpAKoAqwA7WE5TQnV0dG9uWU5TQ29udHJvbFZOU1ZpZXdbTlNSZXNwb25kZXLfEA8AWgCtAA4AcACu +AK8AsABbALEAXABeAF8AsgCzALQATAC2ALcAuAC5ALoAuwC8AL0AvgBgAEwAwQDCAMJbTlNIU2Nyb2xs +ZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNIZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFtdHNbTlNW +U2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAuAaoBvgG4RAjCAJIAhgBlPEBAAAAAA +AAAAAEGYAABBmAAAEQESgAyAC4BmgBqAGtIADgA+AGgAxoBepQDCAMEAtgC7ALqAGoBmgGqAIYAk2wBa +AA4AcADNAFsAXADOAF4AzwBfALMAawDRANIAUwDTANQA1QBgANcAawDVWU5TY3ZGbGFnc1lOU0RvY1Zp +ZXdZTlNCR0NvbG9ygBiAZYBkgBsRCQCAHIAMgDiAGIAc0gAOAD4AaADcgF6hANWAHN8QFwBaAN8ADgDg +AOEA4gDjAOQArwDlAOYA5wBcAF0AcgDoAF4AMgDpAOoAXwDrAOwAwgDuAO8A8ADxAPIA1wB4ALoA9gD3 +APgA+QD6AHgA/ABgAP4A/wEAAMIBAgEDXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlO +U1R2RmxhZ3NfEBNOU09yaWdpbmFsQ2xhc3NOYW1lXE5TSGVhZGVyVmlld18QEU5TQmFja2dyb3VuZENv +bG9yXxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJbnRlcmNlbGxTcGFjaW5nV2lkdGhfEBlOU0NvbHVt +bkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFjaW5nSGVpZ2h0Xk5TQXV0b3NhdmVOYW1l +W05TR3JpZENvbG9yXxAcTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JMb2NhbF5OU1RhYmxlQ29sdW1uc1tO +U1Jvd0hlaWdodIAaEACAYxP/////28CAAIAegCCAOAmAJCNACAAAAAAAABABI0AAAAAAAAAAERESgB8J +gGKADIAdgF8QD4AagCcjQDEAAAAAAABcUGxheWxpc3RWaWV3W05TVGFibGVWaWV3Wns0NDAsIDE5Nn3X +AFoADgBcAF0AXgBfAQUAuwEJAGMBCgBgALsA1YAhgCOAIoAMgCGAHNsAWgAOAM0AWwBcAF0AzgBeAM8A +XwCzAGsA0QERARIA1AETAPIAYADXAGsA8oAYgGUQBIBsgG2AIIAMgDiAGIAgWXs0NDAsIDE3fdIANwA4 +ARsBHKQBHACqAKsAO18QEU5TVGFibGVIZWFkZXJWaWV31gBaAA4AcABcAF4AXwBrAR8BIAEhAGAAa4AY +gCaAJRP/////gAABAIAMgBhfEBR7ey0yNiwgMH0sIHsxNiwgMTd9fdIANwA4ASYBJ6QBJwCqAKsAO11f +TlNDb3JuZXJWaWV30gAOAD4AaAEqgF6nASsBLAEtAS4BLwEwATGAKIA/gESASoBPgFSAWdoBMwAOATQB +NQE2ATcBOAE5AToBBQB4ATwBPQE+AT8BQAFBAUIBQwDVXk5TSXNSZXNpemVhYmxlXE5TSGVhZGVyQ2Vs +bFxOU0lkZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVzaXppbmdNYXNrWk5TTWluV2lkdGha +TlNNYXhXaWR0aAmAPoAqgCkjQFGAAAAAAACANhADI0BCAAAAAAAAI0CPQAAAAAAAgBxWYXJ0aXN01wB9 +AA4A4wCCAIMAhgFHAIgBSAFJAUoBSwDuAUxbTlNUZXh0Q29sb3KANYAtgCuALIAyVkFydGlzdNQADgCW +AJcAmACZAVAAmwFSgBQjQCYAAAAAAACAExEMHNUADgFUAVUBVgFXAVgBWQFaAVsBXFdOU0NvbG9yXE5T +Q29sb3JTcGFjZVtOU0NvbG9yTmFtZV1OU0NhdGFsb2dOYW1lgDGAMBAGgC+ALlZTeXN0ZW1baGVhZGVy +Q29sb3LTAA4BVQFgAVgBQQFiV05TV2hpdGWAMUIxANIANwA4AWQBVKIBVAA71QAOAVQBVQFWAVcBWAFn +AVoBaAFcgDGANIAzgC5fEA9oZWFkZXJUZXh0Q29sb3LTAA4BVQFgAVgBQQFtgDFCMADSADcAOAFvAXCl +AXABcQClAHEAO18QEU5TVGFibGVIZWFkZXJDZWxsXxAPTlNUZXh0RmllbGRDZWxs2AB9AA4A4wCCAIMA +hACGAUcBcwF0ANcBdgCPANUBeQF6EhQh/kCAPYA4gDeAEoAcEQgAgDtZVGV4dCBDZWxs1QAOAVQBVQFW +AVcBWAF+AVoBfwFcgDGAOoA5gC5fEBZjb250cm9sQmFja2dyb3VuZENvbG9y0wAOAVUBYAFYAUEBhIAx +SzAuNjY2NjY2NjkA1QAOAVQBVQFWAVcBWAFnAVoBiAFcgDGANIA8gC5fEBBjb250cm9sVGV4dENvbG9y +0gA3ADgBjAFxpAFxAKUAcQA70gA3ADgBjgGPogGPADtdTlNUYWJsZUNvbHVtbtoBMwAOATQBNQE2ATcB +OAE5AToBBQB4ATwBkwGUAZUBlgFBAZcBQwDVCYA+gEGAQCNAUkAAAAAAAIBDI0BDgAAAAAAAgBxVYWxi +dW3XAH0ADgDjAIIAgwCGAUcAiAFIAUkBnQFLAO4BTIA1gC2AQoAsgDJVQWxidW3YAH0ADgDjAIIAgwCE +AIYBRwFzAXQA1wF2AI8A1QF5AXqAPYA4gDeAEoAcgDvaATMADgE0ATUBNgE3ATgBOQE6AQUAeAE8AasB +rAGtAa4BQQGvAUMA1QmAPoBGgEUjQFLAAAAAAACASSNARIAAAAAAAIAcVXRpdGxl1wB9AA4A4wCCAIMA +hgFHAbMBSAG1AbYBSwDuAUwSBIH+AIA1gEiAR4AsgDJVVGl0bGXTAA4BVQFgAVgBQQG8gDFLMC4zMzMz +MzI5OQDYAH0ADgDjAIIAgwCEAIYBRwFzAXQA1wF2AI8A1QF5AXqAPYA4gDeAEoAcgDvaATMADgE0ATUB +NgE3ATgBOQE6AQUAeAE8AccByAHJAcoBQQHLAUMA1QmAPoBMgEsjQFKnsAAAAACATiNARE9gIAAAAIAc +Vmxlbmd0aNcAfQAOAOMAggCDAIYBRwCIAUgBSQHRAUsB0wFMgDWALYBNgCwSBAAAAIAyVkxlbmd0aNgA +fQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAdwBeoA9gDiAN4ASgBwSBAAIAIA72gEzAA4BNAE1ATYB +NwE4ATkBOgEFAHgBPAHhAeIB4wHkAUEB5QFDANUJgD6AUYBQI0BGAAAAAAAAgFMjQCQAAAAAAACAHFR5 +ZWFy1wB9AA4A4wCCAIMAhgFHAIgBSAFJAesBSwHTAUyANYAtgFKALIAyVFllYXLYAH0ADgDjAIIAgwCE +AIYBRwFzAXQA1wF2AI8A1QHcAXqAPYA4gDeAEoAcgDvaATMADgE0ATUBNgE3ATgBOQE6AQUAeAE8AfkB ++gHjAfsBQQHlAUMA1QmAPoBWgFWAWIAcVWdlbnJl1wB9AA4A4wCCAIMAhgFHAIgBSAFJAgEBSwDuAUyA +NYAtgFeALIAyVUdlbnJl2AB9AA4A4wCCAIMAhACGAUcBcwF0ANcBdgCPANUBeQF6gD2AOIA3gBKAHIA7 +2gEzAA4BNAE1ATYBNwE4ATkBOgEFAHgBPAIPAhACEQISAUECEwFDANUJgD6AW4BaI0BDAAAAAAAAgF0j +QBAAAAAAAACAHFV0cmFja9cAfQAOAOMAggCDAIYBRwCIAUgBSQIZAUsB0wFMgDWALYBcgCyAMlVUcmFj +a9gAfQAOAOMAggCDAIQAhgFHAXMBdADXAXYAjwDVAdwBeoA9gDiAN4ASgByAO9IANwA4AiUCJqMCJgIn +ADteTlNNdXRhYmxlQXJyYXlXTlNBcnJhedUADgFUAVUBVgFXAVgCKgFaAisBXIAxgGGAYIAuWWdyaWRD +b2xvctMADgFVAWABWAFBAjCAMUQwLjUAXxAUQ29nU3BvdGxpZ2h0UGxheWxpc3TSADcAOAIzAjSiAjQA +O15OU0NsYXNzU3dhcHBlcl8QFXt7MCwgMTd9LCB7NDQwLCAxOTZ9fdIANwA4AjcCOKQCOACqAKsAO1pO +U0NsaXBWaWV32QBaAjoADgBwAFwAXgI7AF8CPABrAGsCPwJAASEAYAJCAGsCRFhOU1RhcmdldFhOU0Fj +dGlvbllOU1BlcmNlbnSAGIAYgGmAZ4AMgGiAGCM/6jeEoAAAAF8QFHt7ODUsIDE3fSwgezE1LCA2OH19 +XF9kb1Njcm9sbGVyOtIANwA4AkgCSaUCSQCpAKoAqwA7Wk5TU2Nyb2xsZXLaAFoCOgAOAHAArgBcAF4C +OwBfAjwAawBrAj8CTgD3ASEAYAJCAGsCUoAYgBiAaYBrgAyAaIAYIz/qBqAAAAAAXxAVe3swLCAxOTh9 +LCB7NDQwLCAxNX190gAOAD4AaAJWgF6hAPKAIF8QFnt7MjAsIDQ1fSwgezQ0MCwgMjEzfX3SADcAOAJa +AlukAlsAqgCrADtcTlNTY3JvbGxWaWV32ABaAA4AcABxAFwAcgBeAF8ATAJeAl8CYAJhAHgAYABMgAuA +g4BxgHIRAQoJgAyAC18QFnt7MjAsIDI3OH0sIHszMTMsIDIyfX3dAH0ADgJnAOMAggCDAIQAhgJoAmkC +agJrAUcCbAJtAm4CbwCKAI8AbAJzAPcAeAJ1AnYBel8QEk5TQ2FuY2VsQnV0dG9uQ2VsbF8QEE5TVGV4 +dEJlemVsU3R5bGVfEBFOU0RyYXdzQmFja2dyb3VuZF8QEk5TU2VhcmNoQnV0dG9uQ2VsbF8QEE5TTWF4 +aW11bVJlY2VudHMSFHH+QICCgHiAc4AVgBKAcBIQAAQACYB1EP+AO9UADgFUAVUBVgFXAVgBWQFaAnsB +XIAxgDCAdIAuXxATdGV4dEJhY2tncm91bmRDb2xvctwCOgB9AA4AfwCAAIEAggCEAIUAhgI7AIcCYAKA +AIkCggDuAIoChABsAoYA7gKHAoiAchIAAf4AgBYQS4AVgHaAcBEBkIB3EghEQP9Wc2VhcmNoXxATX3Nl +YXJjaEZpZWxkU2VhcmNoOt0COgB9AA4AfwCAAIECjACCAIQAhQCGAjsAhwJgAoAAiQKCAO4AigKQApEA +bAKGAO4CkwKIXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOAcoAWgBWAeoB5gHCA +gVVjbGVhctIADgA+AGgCl4BeoQKYgHvTAA4CmgA+ApsCnAKfV05TLmtleXOAgKICnQKegHyAfaICoAKh +gH6Af11BWERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0ZXNWYWx1ZVR5 +cGVWY2FuY2Vs0gA3ADgCpgKnowKnAqgAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNEaWN0aW9uYXJ5 +XxATX3NlYXJjaEZpZWxkQ2FuY2VsOtIANwA4AqsCrKUCrAFxAKUAcQA7XxARTlNTZWFyY2hGaWVsZENl +bGzSADcAOAKuAq+mAq8CsACpAKoAqwA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGTYAFoADgBwAHEA +XAByAF4AXwBMArMCtAK1ArYAeABgAEyAC4CKgIWAhhEBIQmADIALXxAUe3s4OCwgMjB9LCB7OTYsIDE3 +fX3YAH0ADgDjAIIAgwCEAIYBRwK8AXQCvgK/AI8AbQLCAXoSBAH+QIA9gIiAh4ASgIQSEEAEAIA7XFNl +YXJjaCBQYXRoOtUADgFUAVUBVgFXAVgBfgFaAsgBXIAxgDqAiYAuXGNvbnRyb2xDb2xvctIANwA4AswC +sKUCsACpAKoAqwA72QBaAA4AcABxAs4AXAByAF4AXwBMAtAC0QLSAtMCtgB4AGAATFtOU0RyYWdUeXBl +c4ALgJSAkICRgIwJgAyAC9IADgA+AD8C2YCPogLaAtuAjYCOXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQg +dHlwZV8QFU5TRmlsZW5hbWVzUGJvYXJkVHlwZdIANwA4At8C4KMC4ALhADtcTlNNdXRhYmxlU2V0VU5T +U2V0XxAWe3sxODksIDE1fSwgezI3MSwgMjZ9fdgC5AB9AA4AgwCEAIYC5QLmAFMC5wLoAI8AbgLrAuwA +bltOU1BhdGhTdHlsZV8QFE5TUGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYCTgBKAixGA +AICSgIvSAA4APgBoAvCAXqDSADcAOALyAvOkAvMApQBxADtaTlNQYXRoQ2VsbNIANwA4AvUC9qUC9gCp +AKoAqwA7XU5TUGF0aENvbnRyb2xaezQ4MCwgMzE4fdIANwA4AvkAqqMAqgCrADtfEBV7ezAsIDB9LCB7 +MTI4MCwgNzc4fX3SADcAOAL8Av2iAv0AO18QEE5TV2luZG93VGVtcGxhdGXSAA4APgBoAwCAXq8QEAMB +AwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQgJuAnoCigKWAsICygLSAtoC+gMKAxYDJgNCA1IDY +gNzUAA4DEgMTAxQDFQBsAEEDGF1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAnYBwgAeAnF8Q +FWluaXRpYWxGaXJzdFJlc3BvbmRlctIANwA4AxsDHKMDHAMdADtfEBROU05pYk91dGxldENvbm5lY3Rv +cl5OU05pYkNvbm5lY3RvctQADgMSAxMDFAMVAB8DIQMigJ2AAoCfgKHSAA4AMgAzAyWABICgXxAZU3Bv +dGxpZ2h0U2VhcmNoQ29udHJvbGxlcl8QGXNwb3RsaWdodFdpbmRvd0NvbnRyb2xsZXLUAA4DEgMTAxQD +KQMhAG4DLICkgJ+Ai4CjXxARY2hhbmdlU2VhcmNoUGF0aDrSADcAOAMvAzCjAzADHQA7XxAVTlNOaWJD +b250cm9sQ29ubmVjdG9y1AAOAxIDEwMUAxUDMwMhAzWAnYCmgJ+Ar9wDNwAOAzgA4QM5AzoDOwM8Az0A +MgM+Az8AeADvAHgDQwB4A0UDRgNHAHgDSQB4AHhfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8Q +FE5TUHJlc2VydmVzU2VsZWN0aW9uWk5TRWRpdGFibGVfEA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVj +dENsYXNzTmFtZV5OU0RlY2xhcmVkS2V5c18QIk5TQ2xlYXJzRmlsdGVyUHJlZGljYXRlT25JbnNlcnRp +b25fEBhOU1NlbGVjdHNJbnNlcnRlZE9iamVjdHNfEBZOU0F2b2lkc0VtcHR5U2VsZWN0aW9uCYBjCYCo +CYCtgKyAqQmApwkJXxASUGxheWxpc3RDb250cm9sbGVyXxARTlNBcnJheUNvbnRyb2xsZXLSAA4APgBo +A1CAXqgBtgGsAeIBPgGUAfoDVwNYgEeARYBQgCmAQIBVgKqAq11QbGF5bGlzdEVudHJ50QAOA1uArtIA +NwA4A10DOqIDOgA7XxAScGxheWxpc3RDb250cm9sbGVy1AAOAxIDEwMUAxUAbgMhA2OAnYCLgJ+AsVtw +YXRoQ29udHJvbNQADgMSAxMDFAMVAEEAHwNpgJ2AB4ACgLNWd2luZG931AAOAxIDEwMUAykDIQBqA2+A +pICfgA6AtV5hZGRUb1BsYXlsaXN0OtgADgMSA3IDcwMTAxQDdAN1A3YDMwN4A3kBMAN7A3wAU1lOU0tl +eVBhdGhZTlNCaW5kaW5nWU5TT3B0aW9uc18QHE5TTmliQmluZGluZ0Nvbm5lY3RvclZlcnNpb26AvYCm +gLmAuIBUgLeAul8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuZ2VucmVVdmFsdWVfEBVhcnJhbmdlZE9i +amVjdHMuZ2VucmXTAA4CmgA+A4EDggOEgLyhA4OAu6ECoYB/XxAbTlNDb25kaXRpb25hbGx5U2V0c0Vk +aXRhYmxl0gA3ADgDiAKoogKoADvSADcAOAOKA4ujA4sDHQA7XxAVTlNOaWJCaW5kaW5nQ29ubmVjdG9y +1wAOAxIDcgNzAxMDFAN1A3YDIQOPA5ADMwOSAFOAvYCfgMGAwICmgL9fEBtjb250ZW50QXJyYXk6IHF1 +ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPXAA4DEgNyA3MDEwMUA3UDdgMhA5kD +eQJgA5wAU4C9gJ+AxIC4gHKAw18QE3ZhbHVlOiBzZWFyY2hTdHJpbmdcc2VhcmNoU3RyaW5n2AAOAxID +cgNzAxMDFAN0A3UDdgMzA6IDeQEvA6UDpgBTgL2ApoDHgLiAT4DGgMhfEBt2YWx1ZTogYXJyYW5nZWRP +YmplY3RzLnllYXJfEBRhcnJhbmdlZE9iamVjdHMueWVhctMADgKaAD4DgQOrA62AvKEDg4C7oQKhgH/Y +AA4DEgNyA3MDEwMUA3QDdQN2AzMDsgOzASsDtQO2AFOAvYCmgMyAy4AogMqAzV8QHXZhbHVlOiBhcnJh +bmdlZE9iamVjdHMuYXJ0aXN0XxAWYXJyYW5nZWRPYmplY3RzLmFydGlzdNMADgKaAD4DgQO7A72AvKED +vIDOoQO+gM8J2AAOAxIDcgNzAxMDFAN0A3UDdgMzA8MDeQEsA8YDxwBTgL2ApoDSgLiAP4DRgNNfEBx2 +YWx1ZTogYXJyYW5nZWRPYmplY3RzLmFsYnVtXxAVYXJyYW5nZWRPYmplY3RzLmFsYnVt0wAOApoAPgOB +A8wDzoC8oQODgLuhAqGAf9gADgMSA3IDcwMTAxQDdAN1A3YDMwPTA7MBMQPWA9cAU4C9gKaA1oDLgFmA +1YDXXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18QFWFycmFuZ2VkT2JqZWN0cy50cmFja9MA +DgKaAD4DgQPcA96AvKEDvIDOoQO+gM/YAA4DEgNyA3MDEwMUA3QDdQN2AzMD4wN5AS0D5gPnAFOAvYCm +gNqAuIBEgNmA218QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMudGl0bGVfEBVhcnJhbmdlZE9iamVjdHMu +dGl0bGXTAA4CmgA+A4ED7APugLyhA4OAu6ECoYB/2AAOAxIDcgNzAxMDFAN0A3UDdgMzA/MDswEuA/YD +9wBTgL2ApoDegMuASoDdgN9fEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmxlbmd0aF8QFmFycmFuZ2Vk +T2JqZWN0cy5sZW5ndGjTAA4CmgA+A4ED/AP+gLyhA7yAzqEDvoDP0gAOAD4EAQQCgOOvECABLAEvAtID +IQQHAEwAwQISAGoAdgJgAS0AawEuAeQAbgHKAzMA8gDVATECtQBBALYBlgEwAUABrgBtASsAbAH7gD+A +T4CRgJ+A4YALgGaAXYAOgBCAcoBEgBiASoBTgIuAToCmgCCAHIBZgIaAB4BqgEOAVIA2gEmAhIAogHCA +WNIADgAyADMEJYAEgOJdTlNBcHBsaWNhdGlvbtIANwA4BCgCJ6ICJwA70gAOAD4EAQQrgOOvECAA1QDV +AG4AHwAfAEEAawExAEwAagBsANUATADVAS8ATAEuAB8AawBrANUAbQAfAGsBLADVASsBLQBMANUATAEw +gByAHICLgAKAAoAHgBiAWYALgA6AcIAcgAuAHIBPgAuASoACgBiAGIAcgISAAoAYgD+AHIAogESAC4Ac +gAuAVNIADgA+BAEEToDjrxAhASwBLwLSAyEEBwBMAMEAagB2AmACEgEtAGsBLgHkAG4BygAfAzMA8gDV +ArUBMQBBALYBlgEwAa4AbQFAASsAbAH7gD+AT4CRgJ+A4YALgGaADoAQgHKAXYBEgBiASoBTgIuAToAC +gKaAIIAcgIaAWYAHgGqAQ4BUgEmAhIA2gCiAcIBY0gAOAD4EAQRygOOvECEEcwR0BHUEdgR3BHgEeQR6 +BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJOA54DogOmA6oDr +gOyA7YDugO+A8IDxgPKA84D0gPWA9oD3gPiA+YD6gPuA/ID9gP6A/4EBAIEBAYEBAoEBA4EBBIEBBYEB +BoEBB18QFFRhYmxlIENvbHVtbiAoYWxidW0pXxATVGFibGUgQ29sdW1uICh5ZWFyKVlQYXRoIENlbGxf +EBtTcG90bGlnaHQgU2VhcmNoIENvbnRyb2xsZXJbQXBwbGljYXRpb25cQ29udGVudCBWaWV3XxARVmVy +dGljYWwgU2Nyb2xsZXJfEB1QdXNoIEJ1dHRvbiAoQWRkIHRvIFBsYXlsaXN0KV8QHUJ1dHRvbiBDZWxs +IChBZGQgdG8gUGxheWxpc3QpXxARU2VhcmNoIEZpZWxkIENlbGxfEB1UZXh0IEZpZWxkIENlbGwgKFRl +eHQgQ2VsbCktNF8QFFRhYmxlIENvbHVtbiAodGl0bGUpW1Njcm9sbCBWaWV3XxAVVGFibGUgQ29sdW1u +IChsZW5ndGgpXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTFfEBpQb3AgVXAgUGF0aCBDb250 +cm9sIFdpZGdldF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0zXEZpbGUncyBPd25lcl8QE1Bs +YXlsaXN0IENvbnRyb2xsZXJfEBFUYWJsZSBIZWFkZXIgVmlld18QQFBsYXlsaXN0IFZpZXcgKEFydGlz +dCwgQWxidW0sIFRpdGxlLCBMZW5ndGgsIFllYXIsIEdlbnJlLCBUcmFjaylfEB5UZXh0IEZpZWxkIENl +bGwgKFNlYXJjaCBQYXRoOilfEBRUYWJsZSBDb2x1bW4gKHRyYWNrKV8QG1BhbmVsIChPcGVuIGZyb20g +U3BvdGxpZ2h0KV8QE0hvcml6b250YWwgU2Nyb2xsZXJfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQgQ2Vs +bClfEBRUYWJsZSBDb2x1bW4gKGdlbnJlKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0yXxAa +U3RhdGljIFRleHQgKFNlYXJjaCBQYXRoOilfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktNl8Q +FVRhYmxlIENvbHVtbiAoYXJ0aXN0KVxTZWFyY2ggRmllbGRfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQg +Q2VsbCktNdIADgA+BAEEt4DjogDVAzOAHICm0gAOAD4EAQS8gOOiAP4DSYAdgKfSAA4APgQBBMGA468Q +MQLSAw0DBgMhAGoBLQMPAeQAbgHKAzMA1QMBALYDAgGWAwkBMABtASwBLwMOBAcATADBAHYCEgJgAwgA +awEuAwsDAwMKAB8A8gExArUDDABBAwUDEAFAAa4BKwMEAGwDBwH7gJGA0ICygJ+ADoBEgNiAU4CLgE6A +poAcgJuAaoCegEOAvoBUgISAP4BPgNSA4YALgGaAEIBdgHKAtoAYgEqAxYCigMKAAoAggFmAhoDJgAeA +sIDcgDaASYAogKWAcIC0gFjSAA4APgQBBPWA468QMQT2BPcE+AT5BPoE+wT8BP0E/gT/BQAFAQUCBQMF +BAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBRIFEwUUBRUFFgUXBRgFGQUaBRsFHAKhBR4FHwUgBSEF +IgUjBSQFJQUmgQEMgQENgQEOgQEPgQEQgQERgQESgQETgQEUgQEVgQEWgQEXgQEYgQEZgQEagQEbgQEc +gQEdgQEegQEfgQEggQEhgQEigQEjgQEkgQElgQEmgQEngQEogQEpgQEqgQErgQEsgQEtgQEugQEvgQEw +gQExgQEygH+BATOBATSBATWBATaBATeBATiBATmBATqBATsQWRBlEEgQERAFECQQXRAqEFgQKRAQEBwQ +PRAaEEwQKBAtEB4QTxAhEGsT//////////0QGxAsEDgQZhAYECAQXhBbEDoQbBAdEFAQaBBaEGkQJxAl +ECIQNxBKECvSAA4APgBoBVSAXqDSAA4APgQBBVeA46DSAA4APgQBBVqA46DSADcAOAVcBV2iBV0AO15O +U0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYC6gLwAzsDQgNJA1cDaQOFA5MDnwOrA7kD +xAPSA+4D/AQPBCEEOwRFBFIEVARXBFkEXARfBGEEYwRlBGgEawRtBHAEcgR0BHYEeQR7BH4EhwSTBJUE +lwSzBLwExQTQBNUE5ATtBQAFCQUUBRYFGQUbBUQFUQVeBWwFdgWEBZEFowW3BcMFxQXHBckFywXQBdIF +1AXWBdgF2gX1BgsGEwYwBkIGTQZWBmIGawZ3BnkGewZ9BoAGggaEBoYGjwaRBpwGngagBqIGpAamBscG +zwbWBuAG4gbkBuYG6AbrBuwG7gbwBwoHOwdHB10HcgeBB5MHngeoB7YHyAfVB+MH6AfqB+wH7gfwB/IH +9Af2B/gH+gf/CAgIGggrCDIIOQhCCEQITQhPCFIIXwhoCG0IdAh1CH4IhwiUCKEIqgi1CL4IyAjPCNsJ +GgkmCS8JPAlPCVwJaAl2CYQJhgmICYoJjAmPCZEJkwmVCagJqwmtCa8JsQmzCbUJvgnACcsJzQnPCdEJ +0wnVCgIKDAoWCiAKIgokCiYKKAorCi0KLwoxCjMKNQo+CkAKQwpFCqQKxgrQCuYK8wsHCxwLNgtSC20L +fAuIC6cLtgvCC8QLxgvIC9EL0wvVC9cL2AvaC+ML5QvuC/EL8wv0C/YL+Av6C/wL/gwADAIMCwwYDCQM +LwxMDE4MUAxSDFQMVgxYDIUMhwyJDIsMjQyPDJEMkwyVDJcMmQyjDKwMtQzJDOIM5AzmDOgM8QzzDPUN +DA0VDR4NLA01DTcNRg1IDUoNTA1ODVANUg1UDX0NjA2ZDaYNrg25DcgN0w3eDd8N4Q3jDeUN7g3wDfIN ++w4EDgYODQ4qDjYOOA46DjwOPg5ADkcOWA5aDmMOZQ5oDn0OhQ6SDp4OrA6uDrAOsg60DrYOvQ7JDtYO +3g7gDuMO7A7xDwYPCA8KDwwPDg8gDy0PLw8yDzsPRg9aD2wPjQ+SD5QPlg+YD5oPnA+fD6EPqw/AD8IP +xA/GD8gP4Q/uD/AP/BAREBMQFRAXEBkQLBA1ED4QRxBMEFoQgxCEEIYQiBCKEJMQlRCeEKAQphDDEMUQ +xxDJEMsQzRDTEPQQ9hD4EPoQ/BD+EQARKREqESwRLhEwETkROxFEEUYRTBFpEW4RcBFyEXQRdhF4EX4R +ixGNEZkRuhG8Eb4RwBHCEcQRxhHvEfAR8hH0EfYR/xIBEgoSDBITEjASMhI0EjYSOBI9Ej8SRhJnEmkS +axJtEm8ScRJ2EngSoRKiEqQSphKoErESsxK8Er4SwxLgEuIS5BLmEugS6hLvExATEhMUExYTGBMaExwT +RRNGE0gTShNME04TUBNWE3MTdRN3E3kTexN9E4MTpBOmE6gTqhOsE64TsBPZE9oT3BPeE+AT6RPrE/QT +9hP8FBkUGxQdFB8UIRQjFCkUShRMFE4UUBRSFFQUVhRfFGYUdRR9FJIUlBSWFJgUmhSkFLEUsxS4FM8U +2BTdFOwVBBUNFRYVIRVGFU8VWBViFWQVZhVoFWoVbBVuFXAVeRWQFZ0VphWxFbwV5RXnFekV6xXtFe8V +8RXzFfwWFBYdFh8WIhYkFj0WRhZPFlwWfRZ/FoEWgxaFFogWiRaLFo0WphbbFvAXAxcXFywXPxdEF0YX +SBdKF0wXThdQF1UXVhdYF1oXXBdxF3MXdRd3F3kXjxfAF8IXxxfJF8sXzRfPF9EX1BfWF9sX4hf4GC0Y +UxhVGFcYWRhbGF0YXxhhGGcYcBhyGHUYdxiEGIwYjhiTGJUYlxicGJ4YoBiuGNoY4RjqGPEZBxkUGSoZ +Mxk+GVIZWxloGXYZghmjGaUZpxmpGasZrhmvGbEZsxnKGesZ8BnyGfQZ9hn4GfoZ/xoBGg4aIxolGica +KRorGjgaQRpMGnEafRp/GoEagxqFGocaiBqKGowalRqXGpwanhqgGrwa1BrdGuQa8Rr3GxAbMRs9G1Qb +XxtkG2YbaBtqG20bbxtxG3obfBt9G4YbjxuaG6Mbrhu8G8cb0BvXG+8b+Bv9HBAcGRwbHD4cQBxCHEQc +RhxIHEocTBxOHFAcUhxUHFYcWBxaHFwcXhxvHH0chhyOHJAckhyUHJYcrhy3HL4c1RzkHPUc9xz5HPsc +/R0GHQgdCh0mHUIdUx1VHVcdWR1bHW8deB1/HZcdqB2qHawdrh2wHeEd/h4VHiAeMh5GHlUeeh6VHq4e +rx6xHrIetB61HrceuR67Hrwevh6/HsAe1R7pHvIe9B8FHwcfCR8LHw0fDx8RHxMfFR8jHygfKh8zHzgf +TR9eH2AfYh9kH2Yfch+DH4Ufhx+JH4sfkh+jH6Ufpx+pH6sfuh/bH+Uf7x/5IBggGiAcIB4gICAiICQg +JiBFIEsgYyBwIHIgdSB3IHogfCCaIKMgqCCxILgg0CDtIO8g8SDzIPUg9yD5IRchJCEyIU8hUSFTIVUh +VyFZIVshcSF+IZ8hoSGjIaUhpyGpIashrSHLIeIh7yHxIfQh9iH5IfsiHCIeIiAiIiIkIiYiKCIqIkoi +YyJwInIidSJ3InoifCJ9Ip4ioCKiIqQipiKoIqoirCLLIuMi8CLyIvUi9yL6IvwjHSMfIyEjIyMlIycj +KSMrI0ojYiNvI3EjdCN2I3kjeyOcI54joCOiI6QjpiOoI6ojySPhI+4j8CPzI/Uj+CP6JBskHSQfJCEk +IyQlJCckKSRJJGIkbyRxJHQkdiR5JHskhCSGJMkkyyTNJM8k0STTJNUk1yTZJNsk3STfJOEk4yTlJOck +6STrJO0k7yTxJPMk9ST3JPkk+yT9JP8lASUDJQUlByUJJRIlFCUWJSQlLSUyJTslPSWAJYIlhCWGJYgl +iiWMJY4lkCWSJZQlliWYJZolnCWeJaAloiWkJaYlqCWqJawlriWwJbIltCW2JbgluiW8Jb4lwCXJJcsm +ECYSJhQmFiYYJhomHCYeJiAmIiYkJiYmKCYqJiwmLiYwJjImNCY2JjgmOiY8Jj4mQCZCJkQmRiZIJkom +TCZOJlAmUiZbJl0moiakJqYmqCaqJqwmriawJrImtCa2Jrgmuia8Jr4mwCbCJsQmxibIJsomzCbOJtAm +0ibUJtcm2ibdJuAm4ybmJukm7CcDJxknIydBJ00nWiduJ44nrifCJ+In+SgFKB0oPShaKHoohyidKLEo +9CkVKSwpSilgKX4plSm1KdIp8ioKKhcqNypAKkIqRypJKksqVCpWKlsqXSpfKmgqairPKtEq0yrVKtcq +2SrbKt0q3yrhKuMq5SrnKukq6yrtKu8q8SrzKvUq9yr5Kvsq/Sr/KwErAysFKwcrCSsLKw0rDysRKxMr +FSsXKxkrGysdKx8rISsjKyUrJyspKysrLSsvKzErOis8K6ErpCunK6orrSuwK7Mrtiu5K7wrvyvCK8Ur +yCvLK84r0SvUK9cr2ivdK+Ar4yvmK+kr7CvvK/Ir9Sv4K/sr/iwBLAQsBywKLA0sECwTLBYsGCwbLB4s +ISwkLCcsKiwtLDAsMyw1LDcsOSw7LD0sPyxBLEMsRSxHLEksSyxNLE8sUSxTLFUsVyxZLFssXSxmLGgs +aixsLG4scCxyLHQsdix4LHosfCx+LIAsgiyELIYsiCyKLIwsjiyQLJksmyycLKUspyyoLLEssyy0LL0s +wgAAAAAAAAICAAAAAAAABV4AAAAAAAAAAAAAAAAAACzRA diff --git a/Spotlight/SpotlightPlaylistEntry.h b/Spotlight/SpotlightPlaylistEntry.h index 13e9a5097..c830cca0d 100644 --- a/Spotlight/SpotlightPlaylistEntry.h +++ b/Spotlight/SpotlightPlaylistEntry.h @@ -10,8 +10,12 @@ #import "PlaylistEntry.h" -@interface SpotlightPlaylistEntry : PlaylistEntry +@interface SpotlightPlaylistEntry : PlaylistEntry { + + NSNumber *length; +} +(SpotlightPlaylistEntry *)playlistEntryWithMetadataItem:(NSMetadataItem *)metadataItem; +@property(copy) NSNumber *length; @end diff --git a/Spotlight/SpotlightPlaylistEntry.m b/Spotlight/SpotlightPlaylistEntry.m index fcbc228d3..faeab5a3b 100644 --- a/Spotlight/SpotlightPlaylistEntry.m +++ b/Spotlight/SpotlightPlaylistEntry.m @@ -16,6 +16,9 @@ static NSArray * entryKeys; // extramdKeys represents those keys that require additional processing static NSArray * extramdKeys; + +// allmdKeys is a combined array of both mdKeys and entryKeys +static NSArray * allmdKeys; // And the dictionary that matches them static NSDictionary * tags; @@ -26,23 +29,25 @@ static NSDictionary * tags; { mdKeys = [NSArray arrayWithObjects: @"kMDItemTitle", - @"kMDItemAuthors", @"kMDItemAlbum", @"kMDItemAudioTrackNumber", @"kMDItemRecordingYear", @"kMDItemMusicalGenre", + @"kMDItemDurationSeconds", nil]; entryKeys = [NSArray arrayWithObjects: @"title", - @"artist", @"album", @"track", @"year", @"genre", + @"length", nil]; extramdKeys = [NSArray arrayWithObjects: @"kMDItemPath", + @"kMDItemAuthors", nil]; + allmdKeys = [mdKeys arrayByAddingObjectsFromArray:extramdKeys]; tags = [NSDictionary dictionaryWithObjects:entryKeys forKeys:mdKeys]; } @@ -50,15 +55,17 @@ static NSDictionary * tags; { // use the matching tag sets to generate a playlist entry SpotlightPlaylistEntry *entry = [[[SpotlightPlaylistEntry alloc] init] autorelease]; - NSDictionary *songAttributes = [metadataItem valuesForAttributes:mdKeys]; - NSDictionary *extraAttributes = [metadataItem valuesForAttributes:extramdKeys]; + NSDictionary *songAttributes = [metadataItem valuesForAttributes:allmdKeys]; for (NSString * mdKey in tags) { [entry setValue: [songAttributes objectForKey:mdKey] forKey:[tags objectForKey:mdKey]]; } // URL needs to be generated from the simple path stored in kMDItemPath - [entry setURL: [NSURL fileURLWithPath: [extraAttributes objectForKey:@"kMDItemPath"]]]; + [entry setURL: [NSURL fileURLWithPath: [songAttributes objectForKey:@"kMDItemPath"]]]; + + // Authors is an array, but we only care about the first item in it + [entry setArtist: [[songAttributes objectForKey:@"kMDItemAuthors"] objectAtIndex:0]]; return entry; } @@ -66,8 +73,10 @@ static NSDictionary * tags; { if (self = [super init]) { - + length = nil; } return self; } + +@synthesize length; @end diff --git a/Spotlight/SpotlightTransformers.h b/Spotlight/SpotlightTransformers.h deleted file mode 100644 index 7eef61517..000000000 --- a/Spotlight/SpotlightTransformers.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SpotlightTransformers.h -// Cog -// -// Created by Matthew Grinshpun on 10/02/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// - -#import - - -@interface SpotlightArtistTransformer : NSValueTransformer{ - -} - -@end diff --git a/Spotlight/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m deleted file mode 100644 index a8f59af6b..000000000 --- a/Spotlight/SpotlightTransformers.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// SpotlightTransformers.m -// Cog -// -// Created by Matthew Grinshpun on 10/02/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// - -#import "SpotlightTransformers.h" - -// kMDItemAuthor is an array of values. -// For music, the first value is the artist -@implementation SpotlightArtistTransformer - -+ (Class)transformedValueClass { - return [NSString class]; -} - -- (id)transformedValue:(id)value { - NSString * artistString = @""; - if (value != nil) { - artistString = [NSString stringWithString: - (NSString *)[value objectAtIndex:0]]; - } - return artistString; -} -@end