From 67816346e04004a4892ff8287e3f2fcde09951d9 Mon Sep 17 00:00:00 2001 From: matthewleon Date: Mon, 18 Feb 2008 20:09:02 +0000 Subject: [PATCH] Spotlight: Elegant solution to storing search scopes. --- Spotlight/SpotlightPanel.xib | 1139 +++++++++++++------------ Spotlight/SpotlightTransformers.h | 3 +- Spotlight/SpotlightTransformers.m | 15 + Spotlight/SpotlightWindowController.h | 2 - Spotlight/SpotlightWindowController.m | 47 +- 5 files changed, 609 insertions(+), 597 deletions(-) diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib index eb8486f34..1aea4ecbf 100644 --- a/Spotlight/SpotlightPanel.xib +++ b/Spotlight/SpotlightPanel.xib @@ -8,8 +8,8 @@ 352.00 YES - + YES @@ -53,7 +53,7 @@ 134217728 Add to Playlist - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -110,7 +110,7 @@ 0 Title - + 1.100000e+01 3100 @@ -120,7 +120,7 @@ 6 - System + System headerTextColor 3 @@ -131,12 +131,12 @@ 337772096 2048 - Text Cell + Text Cell 6 - + controlBackgroundColor 3 @@ -145,7 +145,7 @@ 6 - + controlTextColor @@ -166,7 +166,7 @@ 6 - + headerColor 3 @@ -178,7 +178,7 @@ 337772096 2048 - + @@ -204,7 +204,7 @@ 337772096 2048 - + @@ -311,7 +311,7 @@ 337772096 67110912 - + @@ -327,7 +327,7 @@ 6 - + gridColor 3 @@ -418,7 +418,7 @@ 1 6 - + textBackgroundColor @@ -471,19 +471,19 @@ 289 - {{88, 14}, {96, 17}} + {{88, 13}, {96, 17}} YES 67239488 272630784 - Search Path: + Search Folder: 6 - + controlColor @@ -501,7 +501,7 @@ NSFilenamesPboardType - {{189, 10}, {271, 26}} + {{189, 9}, {271, 26}} YES @@ -553,17 +553,21 @@ 1048576 2147483647 - NSImage + NSImage NSMenuCheckmark - + NSMenuMixedState + + YES + spotlightSearchPath + YES @@ -758,26 +762,6 @@ 154 - - - value: spotlightSearchPath - - - - - - - - spotlightSearchPath - - NSValueTransformerName - StringToURLTransformer - - 2 - - - 157 - pathControl @@ -846,7 +830,7 @@ contentArray query.results - + NSValueTransformerName PausingQueryTransformer 2 @@ -862,6 +846,26 @@ 184 + + + value: values.spotlightSearchPath + + + + + + + value + values.spotlightSearchPath + + NSValueTransformerName + StringToURLTransformer + + 2 + + + 193 + @@ -1291,14 +1295,159 @@ - 190 + 193 YES + + DNDArrayController + NSArrayController + + YES + + YES + + + YES + + + + tableView + NSTableView + + + IBProjectSource + Playlist/DNDArrayController.h + + + + NSObject + + + 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/AppleRemote/AppleRemote.h + + + + PlaylistController + DNDArrayController + + YES + + YES + clear: + clearFilterPredicate: + searchByAlbum: + searchByArtist: + showEntryInFinder: + takeRepeatFromObject: + takeShuffleFromObject: + + + YES + id + + + + + + + + + + YES + + YES + entriesController + playlistLoader + spotlightWindowController + + + YES + EntriesController + PlaylistLoader + SpotlightWindowController + + + + + Playlist/PlaylistController.h + + PlaybackController - NSObject + YES @@ -1324,24 +1473,24 @@ YES - id - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -1368,59 +1517,13 @@ - IBProjectSource + Application/PlaybackController.h - PlaylistController - DNDArrayController - - YES - - YES - clear: - clearFilterPredicate: - searchByAlbum: - searchByArtist: - showEntryInFinder: - takeRepeatFromObject: - takeShuffleFromObject: - - - YES - - - - - - - - - - - YES - - YES - entriesController - playlistLoader - spotlightWindowController - - - YES - EntriesController - PlaylistLoader - SpotlightWindowController - - - - - Playlist/PlaylistController.h - - - - SpotlightPlaylistController - PlaylistController + PlaylistLoader + YES @@ -1431,17 +1534,12 @@ - YES - - YES - - - YES - + playlistController + PlaylistController - - Spotlight/SpotlightPlaylistController.h + + Playlist/PlaylistLoader.h @@ -1466,10 +1564,103 @@ - + Utils/TrackingSlider.h + + SpotlightPlaylistController + PlaylistController + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + Spotlight/SpotlightPlaylistController.h + + + + SpotlightWindowController + NSWindowController + + addToPlaylist: + + + + YES + + YES + pathControl + playlistController + playlistLoader + searchField + + + YES + NSPathControl + NSArrayController + PlaylistLoader + NSSearchField + + + + + Spotlight/SpotlightWindowController.h + + + + PlaylistView + NSTableView + + YES + + YES + scrollToCurrentEntry: + shufflePlaylist: + sortByPath: + toggleColumn: + + + YES + + + + + + + + YES + + YES + playbackController + playlistController + + + YES + PlaybackController + PlaylistController + + + + + Playlist/PlaylistView.h + + EntriesController @@ -1492,197 +1683,10 @@ - + Playlist/EntriesController.h - - PlaylistView - NSTableView - - YES - - YES - scrollToCurrentEntry: - shufflePlaylist: - sortByPath: - toggleColumn: - - - YES - - - - - - - - YES - - YES - playbackController - playlistController - - - YES - PlaybackController - PlaylistController - - - - - Playlist/PlaylistView.h - - - - DNDArrayController - NSArrayController - - YES - - YES - - - YES - - - - tableView - NSTableView - - - - Playlist/DNDArrayController.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/AppleRemote/AppleRemote.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/NDHotKeys/NDHotKeyEvent.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h - - - - SpotlightWindowController - NSWindowController - - addToPlaylist: - - - - YES - - YES - pathControl - playlistController - playlistLoader - searchField - - - YES - NSPathControl - NSArrayController - PlaylistLoader - NSSearchField - - - - - Spotlight/SpotlightWindowController.h - - - - PlaylistLoader - - - YES - - YES - - - YES - - - - playlistController - PlaylistController - - - - Playlist/PlaylistLoader.h - - 0 @@ -1690,267 +1694,268 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBZwALAAwAMQA1ADYAPAA9 -AEEARQBeAGYAdgB7AHwAfQCCAIMAhACHAIsAjACPAJ4AnwCgAKoAqwCsAK0ArgCvALAAsQC1ALYAuAC6 -AL0AvgDCAMcA8wD0APUBBwALAQgBEAEbARwBIQEnAT0BPgFBAUsBXgFqAWsBcwF0AXcBfAF/AYcBiAGJ -AYwBkgGcAZ0BogGnAagBqwGwAbEBswG2Ab8BxgHHAcwBzQHQAdcB4AHmAecB7gH5AgACAQGcAgkCEwIZ -AhoCIQIqAjACMQI4AkACRgJHAk4CUwJUAlcCWAJZAl0CXwJgAmMCaAJpAm4CbwJ0AnUCegKTApQClQKW -ApcCngKmAq8CsALCAsMCxALHAssC0wLXAtgC2wLnAugC6QLsAvYC9wEbAvsC/AL/AwgDCQMbAyADIQMs -Ay0DLgM3AzgDPANFA0YDRwDmA0gDTANNA1ADVANdA14DZwNoA20DbgNwA3oDfwOAA4EDggONA5ADkwOW -AAsDlwOZA5oDmwOeA58DpAOlA6oDqwOwA7EDtgO3A7wDwQPCA84DzwPQA9ED1wPYA9oD3QPlA+YD5wPt -A+4D7wP3A/gD+QP/BAYEBwQIBBAEEQQSBBgEIAQhBCIEKAQwBDEEMgQzBDkEOgRCBEMERARKBFIEUwRU -BFoEYgRjBGQEagSPBJIEkwSXBJsEnQTCBOgFDgUPBRAFEQUSBRMFFAUVBRYFFwUYBRkFGgUbBRwFHQUe -BR8FIAUhBSIFIwUkBSUFJgUnBSgFKQUqBSsFLAUtBS4FLwUwBTEFNgU7BXcFswW0BbUFtgW3BbgFuQW6 -BbsFvAKQBb0BhAW+Bb8FwAXBBcIFwwXEArkFxQXGBccFyAXJBcoFywXMBc0FzgXPBdAF0QXSBdMF1AXV -BdYF1wXYBdkF2gXbBdwF3QXeBd8F4AXhBeIF4wXkBeUBMgD/BeYF6QXsBe9VJG51bGzfEBIADQAOAA8A -EAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0A -LgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nl -c3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5T -Q2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVj -dG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05T -QWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEBZoD7gQEogQFlgAiB -AQKABYEBJ4EBKYEBA4EBY4AAgAaBAQGBAWQQwIEBKtIADgAyADMANFtOU0NsYXNzTmFtZYAEgANfEBlT -cG90bGlnaHRXaW5kb3dDb250cm9sbGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoAO15O -U0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2JqZWN0 -c4AHoNIANwA4AEIAQ6MAQwBEADtcTlNNdXRhYmxlU2V0VU5TU2V00gAOAD4ARgBHgCCvEBYASABJAEoA -SwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXYAJgCeAc4B1gHeAeYDBgMOAxYDHgMmA -yoDMgNSA2oDegOGA5YDpgO+A84D31AAOAF8AYABhAGIAYwBkAGVdTlNEZXN0aW5hdGlvblhOU1NvdXJj -ZVdOU0xhYmVsgCaAFYAKgCXYAA4AZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHVXTlNUaXRsZV8Q -EU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1hZ2VcTlNNaXhl -ZEltYWdlVk5TTWVudYAUgAwSABAAAIANEn////+ADoASgAvTAA4AZwB3AHgAeQB6W05TTWVudUl0ZW1z -gHCAboBvXlNob3cgaW4gRmluZGVyUNMADgAyAH4AfwCAAIFeTlNSZXNvdXJjZU5hbWWAEYAPgBBXTlNJ -bWFnZV8QD05TTWVudUNoZWNrbWFya9IANwA4AIUAhqIAhgA7XxAQTlNDdXN0b21SZXNvdXJjZdMADgAy -AH4AfwCAAIqAEYAPgBNfEBBOU01lbnVNaXhlZFN0YXRl0gA3ADgAjQCOogCOADtaTlNNZW51SXRlbdgA -kAAOAJEAkgCTAJQAlQAyAJYAlwCYAJYAmgCbAJwAnV8QGk5TRmlsdGVyUmVzdHJpY3RzSW5zZXJ0aW9u -XxATTlNPcmlnaW5hbENsYXNzTmFtZVpOU0VkaXRhYmxlXxAPX05TTWFuYWdlZFByb3h5XxARTlNPYmpl -Y3RDbGFzc05hbWVeTlNEZWNsYXJlZEtleXMJgCSAFwmAIoAhgBiAFl8QG1Nwb3RsaWdodFBsYXlsaXN0 -Q29udHJvbGxlcl8QEU5TQXJyYXlDb250cm9sbGVy0gAOAD4ARgCigCCnAKMApAClAKYApwCoAKmAGYAa -gBuAHIAdgB6AH1V0aXRsZVR5ZWFyVmFydGlzdFVhbGJ1bVVnZW5yZVZsZW5ndGhVdHJhY2vSADcAOACy -ALOjALMAtAA7Xk5TTXV0YWJsZUFycmF5V05TQXJyYXldUGxheWxpc3RFbnRyedEADgC3gCPSADcAOAC5 -AJOiAJMAO9IANwA4ALsAvKIAvAA7Xk5TQ2xhc3NTd2FwcGVyXxASc2hvd0VudHJ5SW5GaW5kZXI60gA3 -ADgAvwDAowDAAMEAO18QFU5TTmliQ29udHJvbENvbm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgBfAGAA -YQDDAHUAxQDGgHKAC4AogHHfEBcAyADJAA4AygCRAMsAzADNAM4AzwDQANEA0gDTANQA1QDWADIA1wDY -ANkA2gDbANwA3QCXAN8A4ADhAOIAlgDkAOUA5gDnAOgA6QCWAOsA7ADtAO4A7wDcAPEA8l8QD05TTmV4 -dFJlc3BvbmRlcl8QH05TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTm9uTG9jYWxZTlNUdkZsYWdzXE5TSGVh -ZGVyVmlld18QEU5TQmFja2dyb3VuZENvbG9yXxASTlNBbGxvd3NUeXBlU2VsZWN0XE5TQ29ybmVyVmll -d18QF05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5BdXRvcmVzaXppbmdTdHlsZV8QGE5T -SW50ZXJjZWxsU3BhY2luZ0hlaWdodFhOU3ZGbGFnc1tOU0ZyYW1lU2l6ZVlOU0VuYWJsZWReTlNBdXRv -c2F2ZU5hbWVYTlNXaW5kb3dbTlNHcmlkQ29sb3JfEBxOU0RyYWdnaW5nU291cmNlTWFza0ZvckxvY2Fs -W05TU3VwZXJ2aWV3Xk5TVGFibGVDb2x1bW5zW05TUm93SGVpZ2h0gCsQAIAkE//////bwIAAgCqALoBH -CYAyI0AIAAAAAAAAEAEjQAAAAAAAAAARERKALAmAbYAtgCmAahAPgCuANiNAMQAAAAAAAFxQbGF5bGlz -dFZpZXdbTlNUYWJsZVZpZXfbAMgADgD2APcA+ADSAPkA1gD6ANkA+wD8AP0A/gD/AQABAQDFAOwA4gD8 -AMVXTlNGcmFtZVlOU2N2RmxhZ3NaTlNTdWJ2aWV3c1lOU0RvY1ZpZXdZTlNCR0NvbG9yXU5TTmV4dEtl -eVZpZXeAM4CLgIoQAoCJEQkAgCiALYBHgDOAKFp7NDI1LCAyMTF91wDIAA4A0gDTANYA2QD0AQkBCgEL -AQwA7AEJAMWAL4AxEQEAgDCALYAvgCjbAMgADgD3APgA0gDTAPkA1gD6ANkA+wD8AP0BEwEUAQEBFQDh -AOwA4gD8AOGAM4CLEASAkoCTgC6ALYBHgDOALll7NDI1LCAxN33SADcAOAEdAR6kAR4BHwEgADtfEBFO -U1RhYmxlSGVhZGVyVmlld1ZOU1ZpZXdbTlNSZXNwb25kZXLWAMgADgD2ANIA1gDZAPwBIwEkAQsA7AD8 -gDOANYA0gC2AM98QDwDIASgADgD2ASkAzgEqAPgBKwDSANYA2QEsAPsBLQEuAS8BMAExATIA5AEJATUB -NgE3AOwBLgE6ANwA3FtOU0hTY3JvbGxlclhOU3NGbGFnc18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNTY3Jv -bGxBbXRzW05TVlNjcm9sbGVyXU5TQ29udGVudFZpZXeAf4CQgJWAlBAQgDKAL4CITxAQAAAAAAAAAABB -mAAAQZgAABEBEoAtgH+AjIArgCtfEBR7ezQyNSwgMH0sIHsxNiwgMTd9fdIANwA4AT8BQKQBQAEfASAA -O11fTlNDb3JuZXJWaWV30gAOAD4ARgFDgCCnAUQBRQFGAUcBSAFJAUqAN4BOgFWAWYBegGKAZtoBTAAO -AU0BTgFPAVABUQFSAVMA9ACWAVUBVgCjAVgBWQFaAVsBXADFXk5TSXNSZXNpemVhYmxlXE5TSGVhZGVy -Q2VsbFxOU0lkZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVzaXppbmdNYXNrWk5TTWluV2lk -dGhaTlNNYXhXaWR0aAmATYA4gBkjQF9AAAAAAACARBADI0BEgAAAAAAAI0CPQAAAAAAAgCjXAV8ADgDM -AWABYQFiAWMBZAFlAWYBZwFoAN0BaVtOU0NlbGxGbGFnc1pOU0NvbnRlbnRzWU5TU3VwcG9ydFxOU0Nl -bGxGbGFnczJbTlNUZXh0Q29sb3ISBIH+AIBDgD2AOYA6gD9VVGl0bGXUAA4BbAFtAW4BbwFwAXEBclZO -U1NpemVWTlNOYW1lWE5TZkZsYWdzgDwjQCYAAAAAAACAOxEMHFxMdWNpZGFHcmFuZGXSADcAOAF1AXai -AXYAO1ZOU0ZvbnTTAA4BeAF5AXoBWgF7XE5TQ29sb3JTcGFjZVdOU1doaXRlgD5LMC4zMzMzMzI5OQDS -ADcAOAF9AX6iAX4AO1dOU0NvbG9y1QAOAX4BeAGAAYEBegGDAYQBhQGGW05TQ29sb3JOYW1lXU5TQ2F0 -YWxvZ05hbWWAPoBCEAaAQYBAVlN5c3RlbV8QD2hlYWRlclRleHRDb2xvctMADgF4AXkBegFaAYuAPkIw -ANIANwA4AY0BjqUBjgGPAZABkQA7XxARTlNUYWJsZUhlYWRlckNlbGxfEA9OU1RleHRGaWVsZENlbGxc -TlNBY3Rpb25DZWxsVk5TQ2VsbNgBXwAOAMwBYAFhAZMBYgFjAZQBlQDiAZcBmADFAZoBm11OU0NvbnRy -b2xWaWV3EhQh/kCATIBHgEWARoAoEQgAgEpZVGV4dCBDZWxs1AAOAWwBbQFuAW8BnwFxAaGAPCNAKgAA -AAAAAIA7EQQU1QAOAX4BeAGAAYEBegGkAYQBpQGGgD6ASYBIgEBfEBZjb250cm9sQmFja2dyb3VuZENv -bG9y0wAOAXgBeQF6AVoBqoA+SzAuNjY2NjY2NjkA1QAOAX4BeAGAAYEBegGDAYQBrgGGgD6AQoBLgEBf -EBBjb250cm9sVGV4dENvbG9y0gA3ADgBsgGPpAGPAZABkQA70gA3ADgBtAG1ogG1ADtdTlNUYWJsZUNv -bHVtbtoBTAAOAU0BTgFPAVABUQFSAVMA9ACWAVUBuQClAbsBvAFaAb0BXADFCYBNgE+AGyNAXgAAAAAA -AIBUI0BCAAAAAAAAgCjXAV8ADgDMAWABYQFiAWMBwAFlAcIBwwFoAN0BaRIEAf4AgEOAUYBQgDqAP1ZB -cnRpc3TVAA4BfgF4AYABgQF6AckBhAHKAYaAPoBTgFKAQFtoZWFkZXJDb2xvctMADgF4AXkBegFaAc+A -PkIxANgBXwAOAMwBYAFhAZMBYgFjAZQBlQDiAZcBmADFAZoBm4BMgEeARYBGgCiAStoBTAAOAU0BTgFP -AVABUQFSAVMA9ACWAVUB2gCmAdwB3QFaAd4BXADFCYBNgFaAHCNAXoAAAAAAAIBYI0BDgAAAAAAAgCjX -AV8ADgDMAWABYQFiAWMBwAFlAcIB4wFoAN0BaYBDgFGAV4A6gD9VQWxidW3YAV8ADgDMAWABYQGTAWIB -YwGUAZUA4gGXAZgAxQGaAZuATIBHgEWARoAogErbAUwB7wFNAU4ADgFPAVABUQFSAVMA9ACWAJYB8gCo -AVUB9QH2AVoB9wFcAMVYTlNIaWRkZW4JCYBagB6ATSNASQAAAAAAAIBcI0BET2AgAAAAgCjXAV8ADgDM -AWABYQFiAWMBwAFlAcIB/AFoAf4BaYBDgFGAW4A6EgQAAACAP1ZMZW5ndGjYAV8ADgDMAWABYQGTAWIB -YwGUAZUA4gIEAZgAxQIHAZuATIBHgF2ARoAoEgQACACAStsBTAHvAU0BTgAOAU8BUAFRAVIBUwD0AJYA -lgIMAKQBVQIPAhABWgIRAVwAxQkJgF+AGoBNI0BHgAAAAAAAgGEjQCQAAAAAAACAKNcBXwAOAMwBYAFh -AWIBYwHAAWUBwgIWAWgB/gFpgEOAUYBggDqAP1RZZWFy2AFfAA4AzAFgAWEBkwFiAWMBlAGVAOICBAGY -AMUCBwGbgEyAR4BdgEaAKIBK2wFMAe8BTQFOAA4BTwFQAVEBUgFTAPQAlgCWAiQApwFVAicCKAFaAhEB -XADFCQmAY4AdgE0jQEcAAAAAAACAZYAo1wFfAA4AzAFgAWEBYgFjAcABZQHCAi0BaADdAWmAQ4BRgGSA -OoA/VUdlbnJl2AFfAA4AzAFgAWEBkwFiAWMBlAGVAOICBAGYAMUBmgGbgEyAR4BdgEaAKIBK2gFMAA4B -TQFOAU8BUAFRAVIBUwD0AJYBVQI7AKkCJwI9AVoCPgInAMUJgE2AZ4AfgGkjQCAAAAAAAACAKNcBXwAO -AMwBYAFhAWIBYwHAAWUBwgJDAWgB/gFpgEOAUYBogDqAP1VUcmFja9gBXwAOAMwBYAFhAZMBYgFjAZQB -lQDiAZcBmADFAgcBm4BMgEeARYBGgCiAStUADgF+AXgBgAGBAXoCUAGEAlEBhoA+gGyAa4BAWWdyaWRD -b2xvctMADgF4AXkBegFaAlaAPkQwLjUAXxAUQ29nU3BvdGxpZ2h0UGxheWxpc3ReQ29udGV4dHVhbE1l -bnXSAA4APgBGAluAIKEAZIAK0gA3ADgCXgBtogBtADtUbWVuddIANwA4AmECYqMCYgDBADtfEBROU05p -Yk91dGxldENvbm5lY3RvctQADgBfAGAAYQDDAB8AYwJngHKAAoAVgHRfEBlzcG90bGlnaHRXaW5kb3dD -b250cm9sbGVy1AAOAF8AYABhAMMAYwDFAm2AcoAVgCiAdlpkYXRhU291cmNl1AAOAF8AYABhAMMAxQBj -AnOAcoAogBWAeFl0YWJsZVZpZXfUAA4AXwBgAGEAwwJ3AB8CeYBygHqAAoDA3QJ7AA4CfAJ9An4CfwKA -AoECggKDAoQChQKGAS4CiAKJAooCigKMAo0CjgKPAP8CkAKRACtcTlNXaW5kb3dWaWV3XE5TU2NyZWVu -UmVjdF8QE05TRnJhbWVBdXRvc2F2ZU5hbWVdTlNXaW5kb3dUaXRsZVlOU1dURmxhZ3NdTlNXaW5kb3dD -bGFzc18QFk5TV2luZG93Q29udGVudE1pblNpemVcTlNXaW5kb3dSZWN0XxAPTlNXaW5kb3dCYWNraW5n -XxARTlNXaW5kb3dTdHlsZU1hc2tZTlNNaW5TaXplW05TVmlld0NsYXNzgH+Av4C9gHyAfBP/////oAAA -AIB9gH6AexAfgL6AAF8QGHt7MTk2LCAxOTJ9LCB7NDgwLCAzMjB9fVlTcG90bGlnaHRXTlNQYW5lbFp7 -NDAwLCAyNjB91wDIAA4A+ADSANMA1gDZAOwCmQKaAQsCmwDsAp2ALYC8gICAuoAtgLvSAA4APgBGAqCA -IKUCoQD8AqMCpAKlgIGAM4CWgKqAsdgAyAAOAPYBkQDSANQA1gDZAS4CqAKpAqoCqwCWAOwBLoB/gIeA -goCDEQEJCYAtgH9fEBd7ezMzNSwgMjc1fSwgezEzMSwgMzJ9fdwBXwAOArECsgKzArQBYAFhAZMCtQFi -ArYBwAK3AHECuQK6ArsCvAGYAqECvwLAAsFfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXxASTlNQZXJpb2Rp -Y0ludGVydmFsXk5TQnV0dG9uRmxhZ3MyXxAPTlNLZXlFcXVpdmFsZW50XxAPTlNQZXJpb2RpY0RlbGF5 -XU5TQnV0dG9uRmxhZ3OAhoANEBkQgYCFgISARoCBEMgSCAAAABP/////hoJA/18QD0FkZCB0byBQbGF5 -bGlzdFEN0gA3ADgCxQLGpALGAZABkQA7XE5TQnV0dG9uQ2VsbNIANwA4AsgCyaUCyQLKAR8BIAA7WE5T -QnV0dG9uWU5TQ29udHJvbNIADgA+AEYCzYAgpQDcAToBLwEJAOSAK4CMgJCAL4Ay0gAOAD4ARgLVgCCh -AMWAKF8QFXt7MCwgMTd9LCB7NDI1LCAyMTF9fdIANwA4AtkC2qQC2gEfASAAO1pOU0NsaXBWaWV32QDI -AtwADgD2ANIA1gLdANkC3gD8APwC4QLiAQsA7ALkAPwC5lhOU1RhcmdldFhOU0FjdGlvbllOU1BlcmNl -bnSAM4AzgI+AjYAtgI6AMyM/6jeEoAAAAF8QFnt7NDI1LCAxN30sIHsxNSwgMjExfX1cX2RvU2Nyb2xs -ZXI60gA3ADgC6gLrpQLrAsoBHwEgADtaTlNTY3JvbGxlctoAyALcAA4A9gEpANIA1gLdANkC3gD8APwC -4QLwAOYC8QDsAuQA/AL1gDOAM4CPgJET/////4AAAQCALYCOgDMjP+2kYQAAAABfEBl7ey0xMDAsIC0x -MDB9LCB7NDQwLCAxNX190gAOAD4ARgL5gCChAOGALl8QFnt7MjAsIDQ0fSwgezQ0MCwgMjI4fX3SADcA -OAL9Av6kAv4BHwEgADtcTlNTY3JvbGxWaWV32ADIAA4A9gGRANIA1ADWANkBLgMBAwIDAwMEAJYA7AEu -gH+AqYCXgJgRAQoJgC2Af18QFnt7MjAsIDI4Mn0sIHszMTMsIDIyfX3dAV8ADgMKAMwBYAFhAZMBYgML -AwwDDQMOAWMDDwMQAxEDEgBxAZgCowMWAOYAlgMYAxkBm18QEk5TQ2FuY2VsQnV0dG9uQ2VsbF8QEE5T -VGV4dEJlemVsU3R5bGVfEBFOU0RyYXdzQmFja2dyb3VuZF8QEk5TU2VhcmNoQnV0dG9uQ2VsbF8QEE5T -TWF4aW11bVJlY2VudHMSFHH+QICogJ6AmYANgEaAlhIQAAQACYCbEP+AStUADgF+AXgBgAGBAXoByQGE -Ax4BhoA+gFOAmoBAXxATdGV4dEJhY2tncm91bmRDb2xvctwC3AFfAA4CsgKzArQBYAGTArUBYgLdArYD -AwMjArcDJQDdAHEDJwKjAykA3QMqAyuAmBIAAf4AgIYQS4ANgJyAlhEBkICdEghEQP9Wc2VhcmNoXxAT -X3NlYXJjaEZpZWxkU2VhcmNoOt0C3AFfAA4CsgKzArQDLwFgAZMCtQFiAt0CtgMDAyMCtwMlAN0AcQMz -AzQCowMpAN0DNgMrXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOAmICGgA2AoICf -gJaAp1VjbGVhctIADgA+AEYDOoAgoQM7gKHTAA4DPQA+Az4DPwNCV05TLmtleXOApqIDQANBgKKAo6ID -QwNEgKSApV1BWERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0ZXNWYWx1 -ZVR5cGVWY2FuY2Vs0gA3ADgDSQNKowNKA0sAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNEaWN0aW9u -YXJ5XxATX3NlYXJjaEZpZWxkQ2FuY2VsOtIANwA4A04DT6UDTwGPAZABkQA7XxARTlNTZWFyY2hGaWVs -ZENlbGzSADcAOANRA1KmA1IDUwLKAR8BIAA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGTYAMgADgD2 -AZEA0gDUANYA2QEuA1YDVwNYA1kAlgDsAS6Af4CwgKuArBEBIQmALYB/XxAUe3s4OCwgMTR9LCB7OTYs -IDE3fX3YAV8ADgDMAWABYQGTAWIBYwNfAZUDYQNiAZgCpANlAZsSBAH+QIBMgK6ArYBGgKoSEEAEAIBK -XFNlYXJjaCBQYXRoOtUADgF+AXgBgAGBAXoBpAGEA2sBhoA+gEmAr4BAXGNvbnRyb2xDb2xvctIANwA4 -A28DU6UDUwLKAR8BIAA72QDIAA4A9gGRA3EA0gDUANYA2QEuA3MDdAN1A3YDWQCWAOwBLltOU0RyYWdU -eXBlc4B/gLmAtYC2gLIJgC2Af9IADgA+AD8DfIAHogN9A36As4C0XxAZQXBwbGUgVVJMIHBhc3RlYm9h -cmQgdHlwZV8QFU5TRmlsZW5hbWVzUGJvYXJkVHlwZV8QFnt7MTg5LCAxMH0sIHsyNzEsIDI2fX3YA4MB -XwAOAWEBkwFiA4QDhQD/A4YDhwGYAqUDigOLAqVbTlNQYXRoU3R5bGVfEBROU1BhdGhDb21wb25lbnRD -ZWxsc1pOU0RlbGVnYXRlEhQh/gGAuIBGgLERgACAt4Cx0gAOAD4ARgOPgCCg0gA3ADgDkQOSpAOSAZAB -kQA7Wk5TUGF0aENlbGzSADcAOAOUA5WlA5UCygEfASAAO11OU1BhdGhDb250cm9sWns0ODAsIDMyMH3S -ADcAOAOYAR+jAR8BIAA7XxAVe3swLCAwfSwgezEyODAsIDc3OH19Wns0MDAsIDI3Nn3SADcAOAOcA52i -A50AO18QEE5TV2luZG93VGVtcGxhdGVWd2luZG931AAOAF8AYABhAMMCowAfA6OAcoCWgAKAwltzZWFy -Y2hGaWVsZNQADgBfAGAAYQBiAB8CoQOpgCaAAoCBgMReYWRkVG9QbGF5bGlzdDrUAA4AXwBgAGEAwwKj -AncDr4BygJaAeoDGXxAVaW5pdGlhbEZpcnN0UmVzcG9uZGVy1AAOAF8AYABhAMMAYwAfA7WAcoAVgAKA -yF8QEnBsYXlsaXN0Q29udHJvbGxlctQADgBfAGAAYQDDAGMAxQO1gHKAFYAogMjUAA4AXwBgAGEAwwKl -AB8DwIBygLGAAoDLW3BhdGhDb250cm9s2AAOAF8DwwPEAGAAYQPFA8YDxwBjA8kDygFGA8wDzQD/WU5T -S2V5UGF0aFlOU0JpbmRpbmdZTlNPcHRpb25zXxAcTlNOaWJCaW5kaW5nQ29ubmVjdG9yVmVyc2lvboDT -gBWAz4DOgFWAzYDQXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hbGJ1bVV2YWx1ZV8QFWFycmFuZ2Vk -T2JqZWN0cy5hbGJ1bdMADgM9AD4D0gPTA9WA0qED1IDRoQNEgKVfEBtOU0NvbmRpdGlvbmFsbHlTZXRz -RWRpdGFibGXSADcAOAPZA0uiA0sAO9IANwA4A9sD3KMD3ADBADtfEBVOU05pYkJpbmRpbmdDb25uZWN0 -b3LYAA4AXwPDA8QAYABhA8UDxgPHAB8D4APKAqUD4wPkAP+A04ACgNaAzoCxgNWA118QGnZhbHVlOiBz -cG90bGlnaHRTZWFyY2hQYXRoXxATc3BvdGxpZ2h0U2VhcmNoUGF0aNMADgM9AD4D0gPpA+uA0qED6oDY -oQPsgNlfEBZOU1ZhbHVlVHJhbnNmb3JtZXJOYW1lXxAWU3RyaW5nVG9VUkxUcmFuc2Zvcm1lctgADgBf -A8MDxABgAGEDxQPGA8cAYwPyA8oBSgP1A/YA/4DTgBWA3IDOgGaA24DdXxAcdmFsdWU6IGFycmFuZ2Vk -T2JqZWN0cy50cmFja18QFWFycmFuZ2VkT2JqZWN0cy50cmFja9MADgM9AD4D0gP7A/2A0qED1IDRoQNE -gKXXAA4AXwPDA8QAYABhA8YDxwAfBAIDygKjBAUA/4DTgAKA4IDOgJaA318QE3ZhbHVlOiBzZWFyY2hT -dHJpbmdcc2VhcmNoU3RyaW5n2AAOAF8DwwPEAGAAYQPFA8YDxwBjBAsDygFFBA4EDwD/gNOAFYDjgM6A -ToDigORfEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmFydGlzdF8QFmFycmFuZ2VkT2JqZWN0cy5hcnRp -c3TTAA4DPQA+A9IEFAQWgNKhA9SA0aEDRICl2AAOAF8DwwPEAGAAYQPFA8YDxwBjBBsDygFEBB4EHwD/ -gNOAFYDngM6AN4DmgOhfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnRpdGxlXxAVYXJyYW5nZWRPYmpl -Y3RzLnRpdGxl0wAOAz0APgPSBCQEJoDSoQPUgNGhA0SApdgADgBfA8MDxABgAGEDxQPGA8cAHwQrBCwA -YwQuBC8A/4DTgAKA7IDrgBWA6oDtXxAbY29udGVudEFycmF5OiBxdWVyeS5yZXN1bHRzXGNvbnRlbnRB -cnJheV1xdWVyeS5yZXN1bHRz0wAOAz0APgPSBDUEN4DSoQPqgNihBDiA7l8QF1BhdXNpbmdRdWVyeVRy -YW5zZm9ybWVy2AAOAF8DwwPEAGAAYQPFA8YDxwBjBD0DygFJBEAEQQD/gNOAFYDxgM6AYoDwgPJfEBx2 -YWx1ZTogYXJyYW5nZWRPYmplY3RzLmdlbnJlXxAVYXJyYW5nZWRPYmplY3RzLmdlbnJl0wAOAz0APgPS -BEYESIDSoQPUgNGhA0SApdgADgBfA8MDxABgAGEDxQPGA8cAYwRNA8oBRwRQBFEA/4DTgBWA9YDOgFmA -9ID2XxAddmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5sZW5ndGhfEBZhcnJhbmdlZE9iamVjdHMubGVuZ3Ro -0wAOAz0APgPSBFYEWIDSoQPUgNGhA0SApdgADgBfA8MDxABgAGEDxQPGA8cAYwRdA8oBSARgBGEA/4DT -gBWA+YDOgF6A+ID6XxAbdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy55ZWFyXxAUYXJyYW5nZWRPYmplY3Rz -LnllYXLTAA4DPQA+A9IEZgRogNKhA9SA0aEDRICl0gAOAD4EawRsgQEArxAiAncDdQFEAS4AdQKjAGQC -pQFKAUYBSAEvAqoEegFFAfYBWQFHAMUBOgI9BIIBSQKhAPwDAwIQAqQCKADhA1gB3QBjAbyAeoC2gDeA -f4ALgJaACoCxgGaAVYBegJCAg4D8gE6AXIBEgFmAKICMgGmA/oBigIGAM4CYgGGAqoBlgC6ArIBYgBWA -VNIADgAyADMEkYAEgP1dTlNBcHBsaWNhdGlvbtIADgSUBJUAll8QEE5TU2hhcmVkSW5zdGFuY2WA/wnS -ADcAOASYBJmjBJkEmgA7XxAYTlNVc2VyRGVmYXVsdHNDb250cm9sbGVyXE5TQ29udHJvbGxlctIANwA4 -BJwAtKIAtAA70gAOAD4EawSfgQEArxAiAB8CpQDFAncAHwEuAHUBLgDFAMUAxQD8AqEAHwDFAUcBRADF -APwA/AFKAB8AxQEuAS4CowFIAS4BSQD8AqQBRgAfAUWAAoCxgCiAeoACgH+AC4B/gCiAKIAogDOAgYAC -gCiAWYA3gCiAM4AzgGaAAoAogH+Af4CWgF6Af4BigDOAqoBVgAKATtIADgA+BGsExIEBAK8QIwJ3A3UB -RAB1AGQCowG8AqUBSgFGAUgBLwAfAqoEegSCAMUBRQE6AUcBWQI9AfYBSQKhAPwDAwIQAqQCKADhA1gA -YwHdAS6AeoC2gDeAC4AKgJaAVICxgGaAVYBegJCAAoCDgPyA/oAogE6AjIBZgESAaYBcgGKAgYAzgJiA -YYCqgGWALoCsgBWAWIB/0gAOAD4EawTqgQEArxAjBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AT5 -BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUIBQkFCgULBQwFDYEBBIEBBYEBBoEBB4EBCIEBCYEB +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBawALAAwAMQA1ADYAPAA9 +AEEARQBeAGYAdQB2AHcAgQCCAIMAhACFAIYAhwCIAIwAjQCPAJEAlADAAMEAwgDUAAsA1QDdAOgA6QDu +APQBCgELAQ4BGAErATcBOAFAAUEBRAFJAUwBVAFVAVYBWQFfAWkBagFvAXQBdQF4AX0BfgGAAYMBjAGT +AZQBmQGaAZ0BpAGtAbMBtAG7AcYBzQHOAWkB1gHgAeYB5wHuAfcB/QH+AgUCDQITAhQCGwIgAiECJAIl +AiYCKgIvAjACNQJAAkcCTAJNAk4CTwJaAl0CYAJkAmUCagJ6An8CgAKBAoYChwKIAosCjwKQApMClAKX +ApwCpQKmArgCvQK+AtAC0QLSAtUC3gLfAuMC7ALtAu4AswLvAvMC9AL3AvsC/AMBAwIDBwMQAxEDHgMf +AyADIwMkAykDQgNDA0QDRQNGA04DVgNaA1sDXgNoA2kDagNtA3cDeADoA3wDfQOAA4gDiQOSA5MDmAOZ +A5sACwOcA54DnwOgA6MDpAOpA64DrwOzA7UDtgO7A7wDwQPCA84DzwPQA9ED1wPYA9oD3QPkA+UD5gPu +A+8D8AP2A/4D/wQABAYEDgQPBBAEFgQeBB8EIAQmBC4ELwQwBDEENwQ4BDkEQQRCBEMESQRRBFIEUwRZ +BGEEZgRqBGsEbwPPBHAEcQQ3BHcEeASdBKAEoQSjBMgE7gUUBRUFFgUXBRgFGQUaBRsFHAUdBR4FHwUg +BSEFIgUjBSQFJQUmBScFKAUpBSoFKwUsBS0FLgUvBTAFMQUyBTMFNAU1BTYFNwU8BUEFfQW5BboFuwW8 +Bb0FvgW/BcAFwQXCAP8FwwXEBcUFxgDMBccFyAXJBcoFywXMBc0BUQXOBc8F0AXRBdIF0wXUBdUF1gXX +BdgF2QXaBdsF3AXdBd4F3wM/AxUF4AXhBeIF4wXkBeUF5gXnBegF6QXqBesF7AXvBfIF9VUkbnVsbN8Q +EgANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkA +KgArACwALQAuAC8AMFZOU1Jvb3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNf +EBlOU0FjY2Vzc2liaWxpdHlPaWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFt +ZXdvcmtdTlNDbGFzc2VzS2V5c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxp +dHlDb25uZWN0b3JzXU5TRm9udE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFs +dWVzXxAXTlNBY2Nlc3NpYmlsaXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFqgQEB +gQEsgQFpgAiBAQaABYEBK4EBLYEBB4EBZ4AAgAaBAQWBAWgQw4EBLtIADgAyADMANFtOU0NsYXNzTmFt +ZYAEgANfEBlTcG90bGlnaHRXaW5kb3dDb250cm9sbGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25h +bWWiADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBa +TlMub2JqZWN0c4AHoNIANwA4AEIAQ6MAQwBEADtcTlNNdXRhYmxlU2V0VU5TU2V00gAOAD4ARgBHgBWv +EBYASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXYAJgGKAZIBwgH6AlYCX +gJ+AwoDDgMiAyoDMgNSA14DbgN+A44DngO6A8oD21AAOAF8AYABhAGIAYwBkAGVdTlNEZXN0aW5hdGlv +blhOU1NvdXJjZVdOU0xhYmVsgGGAGoAKgGDYAGcADgBoAGkAagBrAGwAMgBtAG4AbwBtAHEAcgBzAHRf +EBpOU0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8QE05TT3JpZ2luYWxDbGFzc05hbWVaTlNFZGl0YWJs +ZV8QD19OU01hbmFnZWRQcm94eV8QEU5TT2JqZWN0Q2xhc3NOYW1lXk5TRGVjbGFyZWRLZXlzCYAZgAwJ +gBeAFoANgAtfEBtTcG90bGlnaHRQbGF5bGlzdENvbnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlctIA +DgA+AEYAeYAVpwB6AHsAfAB9AH4AfwCAgA6AD4AQgBGAEoATgBRVdGl0bGVUeWVhclZhcnRpc3RVYWxi +dW1VZ2VucmVWbGVuZ3RoVXRyYWNr0gA3ADgAiQCKowCKAIsAO15OU011dGFibGVBcnJheVdOU0FycmF5 +XVBsYXlsaXN0RW50cnnRAA4AjoAY0gA3ADgAkABqogBqADvSADcAOACSAJOiAJMAO15OU0NsYXNzU3dh +cHBlct8QFwCVAJYADgCXAGgAmACZAJoAmwCcAJ0AngCfAKAAoQCiAKMAMgCkAKUApgCnAKgAqQCqAG4A +rACtAK4ArwBtALEAsgCzALQAtQC2AG0AuAC5ALoAuwC8AKkAvgC/XxAPTlNOZXh0UmVzcG9uZGVyXxAf +TlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlOU1R2RmxhZ3NcTlNIZWFkZXJWaWV3XxARTlNC +YWNrZ3JvdW5kQ29sb3JfEBJOU0FsbG93c1R5cGVTZWxlY3RcTlNDb3JuZXJWaWV3XxAXTlNJbnRlcmNl +bGxTcGFjaW5nV2lkdGhfEBlOU0NvbHVtbkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFj +aW5nSGVpZ2h0WE5TdkZsYWdzW05TRnJhbWVTaXplWU5TRW5hYmxlZF5OU0F1dG9zYXZlTmFtZVhOU1dp +bmRvd1tOU0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTG9jYWxbTlNTdXBlcnZpZXde +TlNUYWJsZUNvbHVtbnNbTlNSb3dIZWlnaHSAHRAAgBkT/////9vAgACAHIAggDkJgCQjQAgAAAAAAAAQ +ASNAAAAAAAAAABEREoAeCYBfgB+AG4BcEA+AHYAoI0AxAAAAAAAAXFBsYXlsaXN0Vmlld1tOU1RhYmxl +Vmlld9sAlQAOAMMAxADFAJ8AxgCjAMcApgDIAMkAygDLAMwAzQDOAGMAuQCvAMkAY1dOU0ZyYW1lWU5T +Y3ZGbGFnc1pOU1N1YnZpZXdzWU5TRG9jVmlld1lOU0JHQ29sb3JdTlNOZXh0S2V5Vmlld4AlgKmAqBAC +gKcRCQCAGoAfgDmAJYAaWns0MjUsIDIxMX3XAJUADgCfAKAAowCmAMEA1gDXANgA2QC5ANYAY4AhgCMR +AQCAIoAfgCGAGtsAlQAOAMQAxQCfAKAAxgCjAMcApgDIAMkAygDgAOEAzgDiAK4AuQCvAMkAroAlgKkQ +BICwgLGAIIAfgDmAJYAgWXs0MjUsIDE3fdIANwA4AOoA66QA6wDsAO0AO18QEU5TVGFibGVIZWFkZXJW +aWV3Vk5TVmlld1tOU1Jlc3BvbmRlctYAlQAOAMMAnwCjAKYAyQDwAPEA2AC5AMmAJYAngCaAH4Al3xAP +AJUA9QAOAMMA9gCbAPcAxQD4AJ8AowCmAPkAyAD6APsA/AD9AP4A/wCxANYBAgEDAQQAuQD7AQcAqQCp +W05TSFNjcm9sbGVyWE5Tc0ZsYWdzXxAQTlNIZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFtdHNbTlNWU2Ny +b2xsZXJdTlNDb250ZW50Vmlld4BmgK6As4CyEBCAJIAhgKZPEBAAAAAAAAAAAEGYAABBmAAAEQESgB+A +ZoCqgB2AHV8QFHt7NDI1LCAwfSwgezE2LCAxN3190gA3ADgBDAENpAENAOwA7QA7XV9OU0Nvcm5lclZp +ZXfSAA4APgBGARCAFacBEQESARMBFAEVARYBF4ApgECAR4BLgFCAVIBY2gEZAA4BGgEbARwBHQEeAR8B +IADBAG0BIgEjAHoBJQEmAScBKAEpAGNeTlNJc1Jlc2l6ZWFibGVcTlNIZWFkZXJDZWxsXE5TSWRlbnRp +ZmllcldOU1dpZHRoWk5TRGF0YUNlbGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdpZHRo +CYA/gCqADiNAX0AAAAAAAIA2EAMjQESAAAAAAAAjQI9AAAAAAACAGtcBLAAOAJkBLQEuAS8BMAExATIB +MwE0ATUAqgE2W05TQ2VsbEZsYWdzWk5TQ29udGVudHNZTlNTdXBwb3J0XE5TQ2VsbEZsYWdzMltOU1Rl +eHRDb2xvchIEgf4AgDWAL4ArgCyAMVVUaXRsZdQADgE5AToBOwE8AT0BPgE/Vk5TU2l6ZVZOU05hbWVY +TlNmRmxhZ3OALiNAJgAAAAAAAIAtEQwcXEx1Y2lkYUdyYW5kZdIANwA4AUIBQ6IBQwA7Vk5TRm9udNMA +DgFFAUYBRwEnAUhcTlNDb2xvclNwYWNlV05TV2hpdGWAMEswLjMzMzMzMjk5ANIANwA4AUoBS6IBSwA7 +V05TQ29sb3LVAA4BSwFFAU0BTgFHAVABUQFSAVNbTlNDb2xvck5hbWVdTlNDYXRhbG9nTmFtZYAwgDQQ +BoAzgDJWU3lzdGVtXxAPaGVhZGVyVGV4dENvbG9y0wAOAUUBRgFHAScBWIAwQjAA0gA3ADgBWgFbpQFb +AVwBXQFeADtfEBFOU1RhYmxlSGVhZGVyQ2VsbF8QD05TVGV4dEZpZWxkQ2VsbFxOU0FjdGlvbkNlbGxW +TlNDZWxs2AEsAA4AmQEtAS4BYAEvATABYQFiAK8BZAFlAGMBZwFoXU5TQ29udHJvbFZpZXcSFCH+QIA+ +gDmAN4A4gBoRCACAPFlUZXh0IENlbGzUAA4BOQE6ATsBPAFsAT4BboAuI0AqAAAAAAAAgC0RBBTVAA4B +SwFFAU0BTgFHAXEBUQFyAVOAMIA7gDqAMl8QFmNvbnRyb2xCYWNrZ3JvdW5kQ29sb3LTAA4BRQFGAUcB +JwF3gDBLMC42NjY2NjY2OQDVAA4BSwFFAU0BTgFHAVABUQF7AVOAMIA0gD2AMl8QEGNvbnRyb2xUZXh0 +Q29sb3LSADcAOAF/AVykAVwBXQFeADvSADcAOAGBAYKiAYIAO11OU1RhYmxlQ29sdW1u2gEZAA4BGgEb +ARwBHQEeAR8BIADBAG0BIgGGAHwBiAGJAScBigEpAGMJgD+AQYAQI0BeAAAAAAAAgEYjQEIAAAAAAACA +GtcBLAAOAJkBLQEuAS8BMAGNATIBjwGQATUAqgE2EgQB/gCANYBDgEKALIAxVkFydGlzdNUADgFLAUUB +TQFOAUcBlgFRAZcBU4AwgEWARIAyW2hlYWRlckNvbG9y0wAOAUUBRgFHAScBnIAwQjEA2AEsAA4AmQEt +AS4BYAEvATABYQFiAK8BZAFlAGMBZwFogD6AOYA3gDiAGoA82gEZAA4BGgEbARwBHQEeAR8BIADBAG0B +IgGnAH0BqQGqAScBqwEpAGMJgD+ASIARI0BegAAAAAAAgEojQEOAAAAAAACAGtcBLAAOAJkBLQEuAS8B +MAGNATIBjwGwATUAqgE2gDWAQ4BJgCyAMVVBbGJ1bdgBLAAOAJkBLQEuAWABLwEwAWEBYgCvAWQBZQBj +AWcBaIA+gDmAN4A4gBqAPNsBGQG8ARoBGwAOARwBHQEeAR8BIADBAG0AbQG/AH8BIgHCAcMBJwHEASkA +Y1hOU0hpZGRlbgkJgEyAE4A/I0BJAAAAAAAAgE4jQERPYCAAAACAGtcBLAAOAJkBLQEuAS8BMAGNATIB +jwHJATUBywE2gDWAQ4BNgCwSBAAAAIAxVkxlbmd0aNgBLAAOAJkBLQEuAWABLwEwAWEBYgCvAdEBZQBj +AdQBaIA+gDmAT4A4gBoSBAAIAIA82wEZAbwBGgEbAA4BHAEdAR4BHwEgAMEAbQBtAdkAewEiAdwB3QEn +Ad4BKQBjCQmAUYAPgD8jQEeAAAAAAACAUyNAJAAAAAAAAIAa1wEsAA4AmQEtAS4BLwEwAY0BMgGPAeMB +NQHLATaANYBDgFKALIAxVFllYXLYASwADgCZAS0BLgFgAS8BMAFhAWIArwHRAWUAYwHUAWiAPoA5gE+A +OIAagDzbARkBvAEaARsADgEcAR0BHgEfASAAwQBtAG0B8QB+ASIB9AH1AScB3gEpAGMJCYBVgBKAPyNA +RwAAAAAAAIBXgBrXASwADgCZAS0BLgEvATABjQEyAY8B+gE1AKoBNoA1gEOAVoAsgDFVR2VucmXYASwA +DgCZAS0BLgFgAS8BMAFhAWIArwHRAWUAYwFnAWiAPoA5gE+AOIAagDzaARkADgEaARsBHAEdAR4BHwEg +AMEAbQEiAggAgAH0AgoBJwILAfQAYwmAP4BZgBSAWyNAIAAAAAAAAIAa1wEsAA4AmQEtAS4BLwEwAY0B +MgGPAhABNQHLATaANYBDgFqALIAxVVRyYWNr2AEsAA4AmQEtAS4BYAEvATABYQFiAK8BZAFlAGMB1AFo +gD6AOYA3gDiAGoA81QAOAUsBRQFNAU4BRwIdAVECHgFTgDCAXoBdgDJZZ3JpZENvbG9y0wAOAUUBRgFH +AScCI4AwRDAuNQBfEBRDb2dTcG90bGlnaHRQbGF5bGlzdFl0YWJsZVZpZXfSADcAOAInAiijAigCKQA7 +XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4AXwBgAGEAYgBkAGMCLoBhgAqA +GoBjXxAScGxheWxpc3RDb250cm9sbGVy1AAOAF8AYABhAGICMgAfAjSAYYBlgAKAb9kAlQAOAMMBXgI2 +AJ8AoQCjAKYA+wI4AjkCOgI7AjwAbQC5APtbTlNEcmFnVHlwZXOAZoBugGqAa4BnEQEhCYAfgGbXAJUA +DgDFAJ8AoACjAKYAuQJCAkMA2AJEALkCRoAfgL2ApYC7gB+AvNIADgA+AD8CSYAHogJKAkuAaIBpXxAZ +QXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8QFU5TRmlsZW5hbWVzUGJvYXJkVHlwZV8QFXt7MTg5LCA5 +fSwgezI3MSwgMjZ9fdgCUAEsAA4BLgFgAS8CUQJSAMwCUwJUAWUCMgJXAlgCMltOU1BhdGhTdHlsZV8Q +FE5TUGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYBtgDiAZRGAAIBsgGXSAA4APgBGAlyA +FaDSADcAOAJeAl+kAl8BXQFeADtaTlNQYXRoQ2VsbNIANwA4AmECYqUCYgJjAOwA7QA7XU5TUGF0aENv +bnRyb2xZTlNDb250cm9sW3BhdGhDb250cm9s1AAOAF8AYABhAmYAZAJoAmmAfYAKgHGAfNgADgJrAmwC +bQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeVdOU1RpdGxlXxARTlNLZXlFcXVpdk1vZE1hc2taTlNLZXlF +cXVpdl1OU01uZW1vbmljTG9jWU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51gHuAcxIAEAAAgHQS +f////4B1gHmActMADgJrAnsCfAJ9An5bTlNNZW51SXRlbXOAxoDEgMVeU2hvdyBpbiBGaW5kZXJQ0wAO +ADICggKDAoQChV5OU1Jlc291cmNlTmFtZYB4gHaAd1dOU0ltYWdlXxAPTlNNZW51Q2hlY2ttYXJr0gA3 +ADgCiQKKogKKADtfEBBOU0N1c3RvbVJlc291cmNl0wAOADICggKDAoQCjoB4gHaAel8QEE5TTWVudU1p +eGVkU3RhdGXSADcAOAKRApKiApIAO1pOU01lbnVJdGVtXxASc2hvd0VudHJ5SW5GaW5kZXI60gA3ADgC +lQKWowKWAikAO18QFU5TTmliQ29udHJvbENvbm5lY3RvctQADgBfAGAAYQBiApkAHwKbgGGAf4ACgJTY +AJUADgDDAV4AnwChAKMApgD7Ap4CnwKgAqEAbQC5APuAZoCTgICAgREBCgmAH4BmXxAWe3syMCwgMjgy +fSwgezMxMywgMjJ9fd0BLAAOAqcAmQEtAS4BYAEvAqgCqQKqAqsBMAKsAq0CrgKvAnUBZQKZArMAswBt +ArUCtgFoXxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHlsZV8QEU5TRHJhd3NCYWNr +Z3JvdW5kXxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50cxIUcf5AgJKAiICCgHSA +OIB/EhAABAAJgIQQ/4A81QAOAUsBRQFNAU4BRwGWAVECuwFTgDCARYCDgDJfEBN0ZXh0QmFja2dyb3Vu +ZENvbG9y3AK/ASwADgLAAsECwgEtAWACwwEvAsQCxQKgAscCyALJAKoCdQLLApkCzQCqAs4Cz1hOU1Rh +cmdldF8QEk5TUGVyaW9kaWNJbnRlcnZhbF5OU0J1dHRvbkZsYWdzMl8QD05TS2V5RXF1aXZhbGVudF8Q +D05TUGVyaW9kaWNEZWxheVhOU0FjdGlvbl1OU0J1dHRvbkZsYWdzgIESAAH+AICHEEuAdICFgH8RAZCA +hhIIRED/VnNlYXJjaF8QE19zZWFyY2hGaWVsZFNlYXJjaDrSADcAOALTAtSkAtQBXQFeADtcTlNCdXR0 +b25DZWxs3QK/ASwADgLAAsECwgLWAS0BYALDAS8CxALFAqACxwLIAskAqgJ1AtoC2wKZAs0AqgLdAs9f +ECNOU0FjY2Vzc2liaWxpdHlPdmVycmlkZGVuQXR0cmlidXRlc4CBgIeAdICKgImAf4CRVWNsZWFy0gAO +AD4ARgLhgBWhAuKAi9MADgLkAD4C5QLmAulXTlMua2V5c4CQogLnAuiAjICNogLqAuuAjoCPXUFYRGVz +Y3JpcHRpb25fEClOU0FjY2Vzc2liaWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzS +ADcAOALwAvGjAvEC8gA7XxATTlNNdXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNo +RmllbGRDYW5jZWw60gA3ADgC9QL2pQL2AVwBXQFeADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4AvgC ++aYC+QL6AmMA7ADtADtdTlNTZWFyY2hGaWVsZFtOU1RleHRGaWVsZFtzZWFyY2hGaWVsZNQADgBfAGAA +YQBiAGQAYwMAgGGACoAagJZaZGF0YVNvdXJjZdQADgBfAGAAYQJmAB8DBQMGgH2AAoCYgJ7YAJUADgDD +AV4AnwChAKMApgD7AwkDCgMLAwwAbQC5APuAZoCdgJmAmhEBCQmAH4BmXxAXe3szMzUsIDI3NX0sIHsx +MzEsIDMyfX3cASwADgMSAsACwQLCAS0BLgFgAsMBLwLFAY0CyAJ1AxUDFgMXAxgBZQMFAxsDHAMdXxAT +TlNBbHRlcm5hdGVDb250ZW50c4CHgHQQGRCBgJyAm4A4gJgQyBIIAAAAE/////+GgkD/XxAPQWRkIHRv +IFBsYXlsaXN0UQ3SADcAOAMhAyKlAyICYwDsAO0AO1hOU0J1dHRvbl5hZGRUb1BsYXlsaXN0OtQADgBf +AGAAYQBiAyYAHwMogGGAoIACgMHdAyoADgMrAywDLQMuAy8DMAMxAzIDMwM0AzUA+wM3AzgDOQM5AzsD +PAM9Az4AzAM/A0AAK1xOU1dpbmRvd1ZpZXdcTlNTY3JlZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFt +ZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRvd0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWlu +U2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01p +blNpemVbTlNWaWV3Q2xhc3OAZoDAgL6AooCiE/////+gAAAAgKOApIChEB+Av4AAXxAYe3sxOTYsIDE5 +Mn0sIHs0ODAsIDMyMH19WVNwb3RsaWdodFdOU1BhbmVsWns0MDAsIDI2MH3SAA4APgBGA0iAFaUDBQDJ +ApkDTAIygJiAJYB/gLSAZdIADgA+AEYDUIAVpQCpAQcA/ADWALGAHYCqgK6AIYAk0gAOAD4ARgNYgBWh +AGOAGl8QFXt7MCwgMTd9LCB7NDI1LCAyMTF9fdIANwA4A1wDXaQDXQDsAO0AO1pOU0NsaXBWaWV32QCV +Ar8ADgDDAJ8AowLEAKYDXwDJAMkDYgNjANgAuQNlAMkDZ1lOU1BlcmNlbnSAJYAlgK2Aq4AfgKyAJSM/ +6jeEoAAAAF8QFnt7NDI1LCAxN30sIHsxNSwgMjExfX1cX2RvU2Nyb2xsZXI60gA3ADgDawNspQNsAmMA +7ADtADtaTlNTY3JvbGxlctoAlQK/AA4AwwD2AJ8AowLEAKYDXwDJAMkDYgNxALMDcgC5A2UAyQN2gCWA +JYCtgK8T/////4AAAQCAH4CsgCUjP+2kYQAAAABfEBl7ey0xMDAsIC0xMDB9LCB7NDQwLCAxNX190gAO +AD4ARgN6gBWhAK6AIF8QFnt7MjAsIDQ0fSwgezQ0MCwgMjI4fX3SADcAOAN+A3+kA38A7ADtADtcTlNT +Y3JvbGxWaWV32ACVAA4AwwFeAJ8AoQCjAKYA+wOCA4MDhAI8AG0AuQD7gGaAuoC1gLYJgB+AZl8QFHt7 +ODgsIDEzfSwgezk2LCAxN3192AEsAA4AmQEtAS4BYAEvATADigFiA4wDjQFlA0wDkAFoEgQB/kCAPoC4 +gLeAOIC0EhBABACAPF5TZWFyY2ggRm9sZGVyOtUADgFLAUUBTQFOAUcBcQFRA5YBU4AwgDuAuYAyXGNv +bnRyb2xDb2xvctIANwA4A5oC+qUC+gJjAOwA7QA7Wns0ODAsIDMyMH3SADcAOAOdAOyjAOwA7QA7XxAV +e3swLCAwfSwgezEyODAsIDc3OH19Wns0MDAsIDI3Nn3SADcAOAOhA6KiA6IAO18QEE5TV2luZG93VGVt +cGxhdGVWd2luZG931AAOAF8AYABhAGIAZAAfAi6AYYAKgAKAY9QADgBfAGAAYQBiAnkAYwOtgGGAcoAa +gMdeQ29udGV4dHVhbE1lbnXSAA4APgBGA7GAFaECaIBx0gA3ADgDtAJxogJxADtUbWVuddQADgBfAGAA +YQBiAB8AZAO6gGGAAoAKgMlfEBlzcG90bGlnaHRXaW5kb3dDb250cm9sbGVy1AAOAF8AYABhAGICmQMm +A8CAYYB/gKCAy18QFWluaXRpYWxGaXJzdFJlc3BvbmRlctgADgBfA8MDxABgAGEDxQPGA8cAZAPJA8oB +FQPMA80AzFlOU0tleVBhdGhZTlNCaW5kaW5nWU5TT3B0aW9uc18QHE5TTmliQmluZGluZ0Nvbm5lY3Rv +clZlcnNpb26A04AKgM+AzoBQgM2A0F8QG3ZhbHVlOiBhcnJhbmdlZE9iamVjdHMueWVhclV2YWx1ZV8Q +FGFycmFuZ2VkT2JqZWN0cy55ZWFy0wAOAuQAPgPSA9MD1YDSoQPUgNGhAuuAj18QG05TQ29uZGl0aW9u +YWxseVNldHNFZGl0YWJsZdIANwA4A9kC8qIC8gA70gA3ADgD2wPcowPcAikAO18QFU5TTmliQmluZGlu +Z0Nvbm5lY3RvctcADgBfA8MDxABgAGEDxgPHAB8D4APKApkD4wDMgNOAAoDWgM6Af4DVXxATdmFsdWU6 +IHNlYXJjaFN0cmluZ1xzZWFyY2hTdHJpbmfYAA4AXwPDA8QAYABhA8UDxgPHAGQD6QPKARMD7APtAMyA +04AKgNmAzoBHgNiA2l8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuYWxidW1fEBVhcnJhbmdlZE9iamVj +dHMuYWxidW3TAA4C5AA+A9ID8gP0gNKhA9SA0aEC64CP2AAOAF8DwwPEAGAAYQPFA8YDxwBkA/kDygEW +A/wD/QDMgNOACoDdgM6AVIDcgN5fEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmdlbnJlXxAVYXJyYW5n +ZWRPYmplY3RzLmdlbnJl0wAOAuQAPgPSBAIEBIDSoQPUgNGhAuuAj9gADgBfA8MDxABgAGEDxQPGA8cA +ZAQJA8oBFwQMBA0AzIDTgAqA4YDOgFiA4IDiXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18Q +FWFycmFuZ2VkT2JqZWN0cy50cmFja9MADgLkAD4D0gQSBBSA0qED1IDRoQLrgI/YAA4AXwPDA8QAYABh +A8UDxgPHAGQEGQPKARQEHAQdAMyA04AKgOWAzoBLgOSA5l8QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMu +bGVuZ3RoXxAWYXJyYW5nZWRPYmplY3RzLmxlbmd0aNMADgLkAD4D0gQiBCSA0qED1IDRoQLrgI/YAA4A +XwPDA8QAYABhA8UDxgPHAB8EKQQqAGQELAQtAMyA04ACgOqA6YAKgOiA618QG2NvbnRlbnRBcnJheTog +cXVlcnkucmVzdWx0c1xjb250ZW50QXJyYXldcXVlcnkucmVzdWx0c9MADgLkAD4D0gQzBDWA0qEENIDs +oQQ2gO1fEBZOU1ZhbHVlVHJhbnNmb3JtZXJOYW1lXxAXUGF1c2luZ1F1ZXJ5VHJhbnNmb3JtZXLYAA4A +XwPDA8QAYABhA8UDxgPHAGQEPAPKARIEPwRAAMyA04AKgPCAzoBAgO+A8V8QHXZhbHVlOiBhcnJhbmdl +ZE9iamVjdHMuYXJ0aXN0XxAWYXJyYW5nZWRPYmplY3RzLmFydGlzdNMADgLkAD4D0gRFBEeA0qED1IDR +oQLrgI/YAA4AXwPDA8QAYABhA8UDxgPHAGQETAPKAREETwRQAMyA04AKgPSAzoApgPOA9V8QHHZhbHVl +OiBhcnJhbmdlZE9iamVjdHMudGl0bGVfEBVhcnJhbmdlZE9iamVjdHMudGl0bGXTAA4C5AA+A9IEVQRX +gNKhA9SA0aEC64CP2AAOAF8DwwPEAGAAYQPFA8YDxwRbBFwEXQIyBF8EYADMgNOA94D9gPyAZYD7gP7T +AA4AbARiBGMEZABtXxAQTlNTaGFyZWRJbnN0YW5jZYD6gPgJ0gAOAD4ARgRogBWhBGmA+V8QE3Nwb3Rs +aWdodFNlYXJjaFBhdGjSADcAOARsBG2jBG0EbgA7XxAYTlNVc2VyRGVmYXVsdHNDb250cm9sbGVyXE5T +Q29udHJvbGxlcl8QIXZhbHVlOiB2YWx1ZXMuc3BvdGxpZ2h0U2VhcmNoUGF0aF8QGnZhbHVlcy5zcG90 +bGlnaHRTZWFyY2hQYXRo0wAOAuQAPgPSBHMEdYDSoQR0gP+hBHaBAQBfEBZTdHJpbmdUb1VSTFRyYW5z +Zm9ybWVy0gAOAD4EeQR6gQEErxAiAfUCmQIKAjICOgGJAcMBFwBjARMBqgEmARYEWwBkARUDTAERAPwB +3QCuAmgA+wESARQDhAJ5AwsElwKgAMkDJgEHAwWAV4B/gFuAZYBrgEaAToBYgBqAR4BKgDaAVID3gAqA +UIC0gCmAroBTgCCAcYBmgECAS4C2gHKAmoEBAoCBgCWAoICqgJjSAA4AMgAzBJ+ABIEBA11OU0FwcGxp +Y2F0aW9u0gA3ADgEogCLogCLADvSAA4APgR5BKWBAQSvECIBFgD7ARcA+wIyARIBFABjAMkAYwETAREA +YwAfAB8AYwD7AGMAyQEVAMkCeQMmAGMAYwNMAB8DBQAfApkA+wAfAMkA+4BUgGaAWIBmgGWAQIBLgBqA +JYAagEeAKYAagAKAAoAagGaAGoAlgFCAJYBygKCAGoAagLSAAoCYgAKAf4BmgAKAJYBm0gAOAD4EeQTK +gQEErxAjAB8B9QKZAgoCMgI6AYkBwwEXAGMBEwEWBFsBqgEmAGQBFQCuA0wCaAD8AREB3QD7AnkBEgOE +ARQDCwSXAqAAyQMmAQcDBYACgFeAf4BbgGWAa4BGgE6AWIAagEeAVID3gEqANoAKgFCAIIC0gHGAroAp +gFOAZoBygECAtoBLgJqBAQKAgYAlgKCAqoCY0gAOAD4EeQTwgQEErxAjBPEE8gTzBPQE9QT2BPcE+AT5 +BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBRIFE4EBCIEBCYEB CoEBC4EBDIEBDYEBDoEBD4EBEIEBEYEBEoEBE4EBFIEBFYEBFoEBF4EBGIEBGYEBGoEBG4EBHIEBHYEB -HoEBH4EBIIEBIYEBIoEBI4EBJIEBJYEBJl8QEVBhbmVsIChTcG90bGlnaHQpWVBhdGggQ2VsbF8QFFRh -YmxlIENvbHVtbiAodGl0bGUpXxAVTWVudSAoQ29udGV4dHVhbE1lbnUpXxAaTWVudSBJdGVtIChTaG93 -IGluIEZpbmRlcilcU2VhcmNoIEZpZWxkXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTRfEBpQ -b3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QFFRhYmxlIENvbHVtbiAodHJhY2spXxAUVGFibGUgQ29s -dW1uIChhbGJ1bSlfEBNUYWJsZSBDb2x1bW4gKHllYXIpXxATSG9yaXpvbnRhbCBTY3JvbGxlclxGaWxl -J3MgT3duZXJfEB1CdXR0b24gQ2VsbCAoQWRkIHRvIFBsYXlsaXN0KVtBcHBsaWNhdGlvbl8QH1NoYXJl -ZCBVc2VyIERlZmF1bHRzIENvbnRyb2xsZXJfEEBQbGF5bGlzdCBWaWV3IChUaXRsZSwgQXJ0aXN0LCBB -bGJ1bSwgTGVuZ3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXxAVVGFibGUgQ29sdW1uIChhcnRpc3QpXxAR -VmVydGljYWwgU2Nyb2xsZXJfEBVUYWJsZSBDb2x1bW4gKGxlbmd0aClfEBtUZXh0IEZpZWxkIENlbGwg -KFRleHQgQ2VsbClfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMV8QHVRleHQgRmllbGQgQ2Vs -bCAoVGV4dCBDZWxsKS01XxAUVGFibGUgQ29sdW1uIChnZW5yZSlfEB1QdXNoIEJ1dHRvbiAoQWRkIHRv -IFBsYXlsaXN0KVtTY3JvbGwgVmlld18QEVNlYXJjaCBGaWVsZCBDZWxsXxAdVGV4dCBGaWVsZCBDZWxs -IChUZXh0IENlbGwpLTNfEBpTdGF0aWMgVGV4dCAoU2VhcmNoIFBhdGg6KV8QHVRleHQgRmllbGQgQ2Vs -bCAoVGV4dCBDZWxsKS02XxARVGFibGUgSGVhZGVyIFZpZXdfEB5UZXh0IEZpZWxkIENlbGwgKFNlYXJj -aCBQYXRoOilfEB1TcG90bGlnaHQgUGxheWxpc3QgQ29udHJvbGxlcl8QHVRleHQgRmllbGQgQ2VsbCAo -VGV4dCBDZWxsKS0yXENvbnRlbnQgVmlld9IADgA+BGsFM4EBAKIAYwDFgBWAKNIADgA+BGsFOIEBAKIA -nQDtgBaAKdIADgA+BGsFPYEBAK8QOQFEAGQCowBSAqUBSgBUAEsAUABTAUgBLwKqBHoAxQI9APwCpAIo -AFgA4QNYAE8BvAJ3A3UAWwB1AF0ATgFGAFUASABcAFoAHwFZAUUB9gSCAUcBOgFJAqEATABRAwMASgIQ -AEkAWQBXAE0AVgHdAGMBLoA3gAqAloDJgLGAZoDMgHWAxYDKgF6AkICDgPyAKIBpgDOAqoBlgOGALoCs -gMOAVIB6gLaA74ALgPeAwYBVgNSACYDzgOmAAoBEgE6AXID+gFmAjIBigIGAd4DHgJiAc4BhgCeA5YDe -gHmA2oBYgBWAf9IADgA+BGsFeYEBAK8QOQV6BXsFfAV9BX4FfwWABYEFggWDBYQFhQWGBYcFiAWJBYoF -iwWMBY0FjgWPBZAFkQNEBZMFlAWVBZYFlwWYBZkFmgWbBZwFnQWeBZ8FoAWhBaIFowWkBaUFpgWnBagF -qQWqBasFrAWtBa4FrwWwBbEFsoEBK4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEBNYEBNoEBN4EB -OIEBOYEBOoEBO4EBPIEBPYEBPoEBP4EBQIEBQYEBQoClgQFDgQFEgQFFgQFGgQFHgQFIgQFJgQFKgQFL -gQFMgQFNgQFOgQFPgQFQgQFRgQFSgQFTgQFUgQFVgQFWgQFXgQFYgQFZgQFagQFbgQFcgQFdgQFegQFf -gQFggQFhgQFiECQQrBA3ELgQWBAdEGUQlxA9EJ8QGhP//////////RAcECwQGBBPECsQaBBQEKMQJxBZ -EGYQqxBeELMQIRCdEK8QaRC1EL8QJRAiECkQuhAgEBsQHhAFEJUQoRA4EKAQKhCwEF0QmhBIEGsQKNIA -DgA+AEYF6IAgoNIADgA+BGsF64EBAKDSAA4APgRrBe6BAQCg0gA3ADgF8AXxogXxADteTlNJQk9iamVj -dERhdGEACAAZACIAJwAxADoAPwBEAFIAVABmAzgDPgOJA5ADlwOlA7cD0wPhA+0D+QQHBBIEIAQ8BEoE -XQRvBIkEkwSgBKIEpQSnBKoErQSvBLIEtAS3BLoEvQTABMIExATHBMoEzATPBNgE5ATmBOgFBAUNBRYF -IQUmBTUFPgVRBVoFZQVnBWgFcQV4BYUFiwWUBZYFxQXHBckFywXNBc8F0QXTBdUF1wXZBdsF3QXfBeEF -4wXlBecF6QXrBe0F7wXxBgIGEAYZBiEGIwYlBicGKQZKBlIGZgZxBn8GiQaWBp0GnwahBqYGqAatBq8G -sQazBsAGzAbOBtAG0gbhBuIG7wb+BwAHAgcEBwwHHgcnBywHPwdMB04HUAdSB2UHbgdzB34Hnwe8B9IH -3QfvCAMIEggTCBUIFwgYCBoIHAgeCCAIPghSCFsIXQhsCG4IcAhyCHQIdgh4CHoIgAiFCIwIkgiYCJ8I -pQiuCLUIxAjMCNoI3wjhCOoI7wj4CP0JDAkhCSoJMQlJCVgJaQlrCW0JbwlxCdAJ4goECg4KGwovCkQK -UQprCocKogqrCrcKwQrQCtkK5QsECxALHwsrCy0LLwsxCzoLPAs+C0ALQQtDC0wLTgtXC1oLXAtdC18L -YQtjC2ULZwtpC2sLdAuBC40LugvCC8wL1wvhC+sL+Qv7C/0L/wwBDAMMBgwIDAoMDAwODBAMGww4DDoM -PAw/DEEMQwxFDEcMdAx2DHgMegx8DH4MgAyCDIQMhgyIDJIMmwykDLgMvwzLDOQM5gzoDOoM7AzuDS0N -OQ1CDVUNYg1uDXwNfg2ADYINhA2GDYgNig2MDZ8Nog2kDaYNqA2qDawNww3MDdUN4w3sDe4N/Q3/DgEO -Aw4FDgcOCQ4LDjQOQw5QDl0OZQ5wDn8Oig6VDpYOmA6aDpwOpQ6nDqkOsg67Dr0O2g7mDvEO+w8IDxQP -GQ8bDx0PHw8hDyMPKQ86D0EPSA9RD1MPXA9eD2EPbg93D3wPgw+QD50PpQ+nD7MPvA/BD8kP3g/qD/gP -+g/8D/4QABACEAkQGxAoECoQLRA2EEEQVRBnEHQQexCcEKoQrxCxELMQtRC3ELkQvBC+EMgQ2RDbEOQQ -5hDpEP4RABECEQQRBhEfESwRLhE6EU8RURFTEVURVxFqEXMRfBGFEYoRmBHBEcIRxBHGEcgR0RHTEdwR -3hH7EgASAhIEEgYSCBIKEhESJhIoEioSLBIuEjoSRxJJEkwSbRJvEnEScxJ1EncSeRKiEqMSpRKnEqkS -shK0Er0SvxLcEt4S4BLiEuQS5hLsEw0TDxMRExMTFRMXExkTRhNPE1ATURNTE1UTVxNgE2ITaxNtE4oT -jBOOE5ATkhOXE5kToBPBE8MTxRPHE8kTyxPQE9IT/xQAFAEUAxQFFAcUEBQSFBsUHRQ6FDwUPhRAFEIU -RBRJFGoUbBRuFHAUchR0FHYUoxSkFKUUpxSpFKsUtBS2FLgU1RTXFNkU2xTdFN8U5RUGFQgVChUMFQ4V -EBUSFTsVPBU+FUAVQhVEFU0VTxVsFW4VcBVyFXQVdhV8FZ0VnxWhFaMVpRWnFakVvhXAFcIVxBXGFdAV -3RXfFeQV+xYKFhMWFRYYFhoWIxYoFi0WNhY9FlQWZRZnFmkWaxZtFokWmhacFp4WoBaiFq0WvhbAFsIW -xBbGFtAW4RbjFuUW5xbpFx4XKxc4F04XXBdmF3QXjReaF6wXwBfKF9YX2BfaF9wX3hfgF+kX6xftF+8X -8RfzF/UYEBgaGCIYLRhKGEwYThhQGFIYVBhWGF8YYRhsGG4YcBhyGHQYdhiXGJkYmxidGJ8YohijGKUY -pxjBGPIZCBkdGSwZPhlQGV4ZYBliGWQZZhloGWoZbBluGXAZdRl+GZAZkhmbGaQZsRm6GcUZzhnYGeEZ -4xnuGfAZ8hn0GfYZ+BoBGgMaBhoIGiAaKRoyGj0aYhprGnQafhqAGoIahBqGGogaihqMGpUarhq7GsQa -zxraGwMbBRsHGwkbCxsUGxYbGBsaGyMbPxtIG0obTRtPG2gbcRt6G4cbqBuqG6wbrhuwG7MbtBu2G7gb -0RwGHBscLhxCHFccahxvHHEccxx1HHcceRx7HIAcgRyDHIUchxycHJ4coByiHKQcuhzrHO0c8hz0HPYc -+Bz6HPwc/x0BHQYdDR0jHVgdfh2AHYIdhB2GHYgdih2MHZIdmx2dHaAdoh2vHbcduR2+HcAdwh3HHckd -yx3ZHgUeDB4VHhweMh4/HlUeXh5pHn0ehh6THqEerR7OHtAe0h7UHtYe2R7aHtwe3h71HxYfGx8dHx8f -IR8jHyUfKh8sHzkfTh9QH1IfVB9WH2MfbB93H5wfqB+qH6wfrh+wH7Ifsx+1H7cfwB/CH8cfyR/LH+cf -/yAYIDkgRSBcIGcgbCBuIHAgciB1IHcgeSCCIIQghSCOIJcgoiCrILYgxCDPINgg3yD3IQIhCyEQISMh -KiE7IT0hPyFBIUMhTyFgIWIhZCFmIWghdyGIIYohjCGOIZAhqCG5IbshvSG/IcEh1iHnIekh6yHtIe8i -ACICIgQiBiIIIhQiNSI/IkkiUyJyInQidiJ4InoifCJ+IoAinyKlIr0iyiLMIs8i0SLUItYi9CL9IwIj -CyMSIyojSyNNI08jUSNTI1UjVyNZI3YjjCOZI5sjniOgI6MjpSO+I9cj+CP6I/wj/iQAJAIkBCQGJCUk -PSRKJEwkTyRRJFQkViRzJHUkdyR5JHskfSR/JJUkoiTDJMUkxyTJJMskzSTPJNEk8SUKJRclGSUcJR4l -ISUjJUQlRiVIJUolTCVOJVAlUiVxJYklliWYJZslnSWgJaIlwyXFJcclySXLJc0lzyXRJe8l/CYKJhcm -GSYcJh4mISYjJj0mXiZgJmImZCZmJmgmaiZsJosmoyawJrImtSa3JromvCbdJt8m4SbjJuUm5ybpJusn -CyckJzEnMyc2JzgnOyc9J14nYCdiJ2QnZidoJ2onbCeKJ6EnriewJ7MntSe4J7onwyfGKA0oDygRKBMo -FSgXKBkoGygdKB8oISgjKCUoJygpKCsoLSgvKDEoMyg1KDcoOSg7KD0oPyhBKEMoRShHKEkoSyhNKE8o -UShaKFwoXihsKHUoiCiKKIsolCibKLYowyjMKNEo2ijdKSQpJikoKSopLCkuKTApMik0KTYpOCk6KTwp -PilAKUIpRClGKUgpSilMKU4pUClSKVQpVilYKVopXCleKWApYilkKWYpaClxKXQpvSm/KcEpwynFKccp -ySnLKc0pzynRKdMp1SnXKdkp2yndKd8p4SnjKeUp5ynpKesp7SnvKfEp8yn1Kfcp+Sn7Kf0p/yoBKgMq -DCoPKlgqWypeKmEqZCpnKmoqbSpwKnMqdip5KnwqfyqCKoUqiCqLKo4qkSqUKpcqmiqdKqAqoyqmKqkq -rCqvKrIqtSq4KrsqvirBKtUq3yr2Kw4rKys4K1grdSuMK6MruSvPK9wr/CwILCosbSyFLJkssSzPLO8t -Dy0mLUYtUi1mLYYtoy3DLdct+C4YLjguRS5OLlEuVi5YLlouYy5mLmsubS5vLnguey7wLvIu9C72Lvgu -+i78Lv4vAC8CLwQvBi8ILwovDC8OLxAvEi8ULxYvGC8aLxwvHi8gLyIvJC8mLygvKi8sLy4vMC8yLzQv -Ni84LzovPC8+L0AvQi9EL0YvSC9KL0wvTi9QL1IvVC9WL1gvWi9cL14vYC9iL2svbi/jL+Yv6S/sL+8v -8i/1L/gv+y/+MAEwBDAHMAowDTAQMBMwFjAZMBwwHzAiMCUwKDArMC0wMDAzMDYwOTA8MD8wQjBFMEgw -SzBOMFEwVDBXMFowXTBgMGMwZjBpMGwwbzByMHUweDB7MH4wgTCEMIcwijCNMI8wkTCTMJUwlzCZMJsw -nTCfMKEwozCsMK4wsDCyMLQwtjC4MLowvDC+MMAwwjDEMMYwyDDKMMwwzjDQMNIw1DDWMNgw2jDcMN4w -4DDiMOQw5jDoMOow7DDuMPAw8jD0MPYw+DD6MQMxBTEGMQ8xEjETMRwxHzEgMSkxLgAAAAAAAAICAAAA -AAAABfIAAAAAAAAAAAAAAAAAADE9A +HoEBH4EBIIEBIYEBIoEBI4EBJIEBJYEBJoEBJ4EBKIEBKYEBKlxGaWxlJ3MgT3duZXJfEB1UZXh0IEZp +ZWxkIENlbGwgKFRleHQgQ2VsbCktMlxTZWFyY2ggRmllbGRfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQg +Q2VsbClfEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldFlQYXRoIENlbGxfEB1UZXh0IEZpZWxkIENl +bGwgKFRleHQgQ2VsbCktNV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS02XxAUVGFibGUgQ29s +dW1uICh0cmFjaylfEEBQbGF5bGlzdCBWaWV3IChUaXRsZSwgQXJ0aXN0LCBBbGJ1bSwgTGVuZ3RoLCBZ +ZWFyLCBHZW5yZSwgVHJhY2spXxAUVGFibGUgQ29sdW1uIChhbGJ1bSlfEBRUYWJsZSBDb2x1bW4gKGdl +bnJlKV8QH1NoYXJlZCBVc2VyIERlZmF1bHRzIENvbnRyb2xsZXJfEB1UZXh0IEZpZWxkIENlbGwgKFRl +eHQgQ2VsbCktMV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS00XxAdU3BvdGxpZ2h0IFBsYXls +aXN0IENvbnRyb2xsZXJfEBNUYWJsZSBDb2x1bW4gKHllYXIpXxARVGFibGUgSGVhZGVyIFZpZXdfEBxT +dGF0aWMgVGV4dCAoU2VhcmNoIEZvbGRlcjopXxAaTWVudSBJdGVtIChTaG93IGluIEZpbmRlcilfEBNI +b3Jpem9udGFsIFNjcm9sbGVyXxAUVGFibGUgQ29sdW1uICh0aXRsZSlfEB1UZXh0IEZpZWxkIENlbGwg +KFRleHQgQ2VsbCktM1xDb250ZW50IFZpZXdfEBVNZW51IChDb250ZXh0dWFsTWVudSlfEBVUYWJsZSBD +b2x1bW4gKGFydGlzdClfECBUZXh0IEZpZWxkIENlbGwgKFNlYXJjaCBGb2xkZXI6KV8QFVRhYmxlIENv +bHVtbiAobGVuZ3RoKV8QHUJ1dHRvbiBDZWxsIChBZGQgdG8gUGxheWxpc3QpW0FwcGxpY2F0aW9uXxAR +U2VhcmNoIEZpZWxkIENlbGxbU2Nyb2xsIFZpZXdfEBFQYW5lbCAoU3BvdGxpZ2h0KV8QEVZlcnRpY2Fs +IFNjcm9sbGVyXxAdUHVzaCBCdXR0b24gKEFkZCB0byBQbGF5bGlzdCnSAA4APgR5BTmBAQSiAGQAY4AK +gBrSAA4APgR5BT6BAQSiAHQAuoALgBvSAA4APgR5BUOBAQSvEDkB9QKZAjIBiQEXAGMAUQGqARYEWwBk +A0wBEQD8Ad0A+wBcAEoAWQESAFgDhABPAwsAUgKgAQcDBQBTAE0AHwIKAFcAVgI6AcMASABdARMAWgEm +AFABFQCuAmgBFAJ5AEsAVQBUBJcAWwDJAEkATABOAyaAV4B/gGWARoBYgBqAw4BKgFSA94AKgLSAKYCu +gFOAZoDygGSA44BAgN+AtoCfgJqAyICBgKqAmIDKgJWAAoBbgNuA14BrgE6ACYD2gEeA54A2gMKAUIAg +gHGAS4BygHCA1IDMgQECgO6AJYBigH6Al4Cg0gAOAD4EeQV/gQEErxA5BYAFgQWCBYMFhAWFBYYFhwWI +BYkFigWLBYwFjQWOBY8FkAWRBZIFkwWUBZUFlgWXBZgFmQWaBZsFnAWdBZ4FnwWgBaEFogWjBaQFpQWm +BacFqAWpBaoFqwWsBa0FrgWvBbAFsQWyBbMFtAW1BbYFtwLrgQEvgQEwgQExgQEygQEzgQE0gQE1gQE2 +gQE3gQE4gQE5gQE6gQE7gQE8gQE9gQE+gQE/gQFAgQFBgQFCgQFDgQFEgQFFgQFGgQFHgQFIgQFJgQFK +gQFLgQFMgQFNgQFOgQFPgQFQgQFRgQFSgQFTgQFUgQFVgQFWgQFXgQFYgQFZgQFagQFbgQFcgQFdgQFe +gQFfgQFggQFhgQFigQFjgQFkgQFlgQFmgI8QKxA3EFgQJxAdEBwQsBAoEB4QuhBPECQQGhAqEF0QnxBp +ECIQaxBQEEgQoBA4EBsQBRA9EJcQwhAsEGYQZRBZECkQlRDBECEQtRAlEKEQrBAgEKsQrxCaEF4T//// +//////0QaBAYELgQsxCj0gAOAD4ARgXugBWg0gAOAD4EeQXxgQEEoNIADgA+BHkF9IEBBKDSADcAOAX2 +BfeiBfcAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYDQANGA5EDmAOfA60DvwPb +A+kD9QQBBA8EGgQoBEQEUgRlBHcEkQSbBKgEqgStBLAEswS2BLgEuwS9BMAEwwTGBMkEywTNBNAE0wTV +BNgE4QTtBO8E8QUNBRYFHwUqBS8FPgVHBVoFYwVuBXAFcQV6BYEFjgWUBZ0FnwXOBdAF0gXUBdYF2AXa +BdwF3gXgBeIF5AXmBegF6gXsBe4F8AXyBfQF9gX4BfoGCwYZBiIGKgYsBi4GMAYyBlMGcAaGBpEGowa3 +BsYGxwbJBssGzAbOBtAG0gbUBvIHBgcPBxEHIAciByQHJgcoByoHLAcuBzQHOQdAB0YHTAdTB1kHYgdp +B3gHgAeOB5MHlQeeB6MHrAexB8AIHwgxCFMIXQhqCH4IkwigCLoI1gjxCPoJBgkQCR8JKAk0CVMJXwlu +CXoJfAl+CYAJiQmLCY0JjwmQCZIJmwmdCaYJqQmrCawJrgmwCbIJtAm2CbgJugnDCdAJ3AoJChEKGwom +CjAKOgpICkoKTApOClAKUgpVClcKWQpbCl0KXwpqCocKiQqLCo4KkAqSCpQKlgrDCsUKxwrJCssKzQrP +CtEK0wrVCtcK4QrqCvMLBwsOCxoLMws1CzcLOQs7Cz0LfAuIC5ELpAuxC70LywvNC88L0QvTC9UL1wvZ +C9sL7gvxC/ML9Qv3C/kL+wwSDBsMJAwyDDsMPQxMDE4MUAxSDFQMVgxYDFoMgwySDJ8MrAy0DL8MzgzZ +DOQM5QznDOkM6wz0DPYM+A0BDQoNDA0pDTUNQA1KDVcNYw1oDWoNbA1uDXANcg14DYkNkA2XDaANog2r +Da0NsA29DcYNyw3SDd8N7A30DfYOAg4LDhAOGA4tDjkORw5JDksOTQ5PDlEOWA5qDncOeQ58DoUOkA6k +DrYOww7KDusO+Q7+DwAPAg8EDwYPCA8LDw0PFw8oDyoPMw81DzgPTQ9PD1EPUw9VD24Pew99D4kPng+g +D6IPpA+mD7kPwg/LD9QP2Q/nEBAQERATEBUQFxAgECIQKxAtEEoQTxBREFMQVRBXEFkQYBB1EHcQeRB7 +EH0QiRCWEJgQmxC8EL4QwBDCEMQQxhDIEPEQ8hD0EPYQ+BEBEQMRDBEOESsRLREvETERMxE1ETsRXBFe +EWARYhFkEWYRaBGVEZ4RnxGgEaIRpBGmEa8RsRG6EbwR2RHbEd0R3xHhEeYR6BHvEhASEhIUEhYSGBIa +Eh8SIRJOEk8SUBJSElQSVhJfEmESahJsEokSixKNEo8SkRKTEpgSuRK7Er0SvxLBEsMSxRLyEvMS9BL2 +EvgS+hMDEwUTBxMkEyYTKBMqEywTLhM0E1UTVxNZE1sTXRNfE2ETihOLE40TjxORE5MTnBOeE7sTvRO/ +E8ETwxPFE8sT7BPuE/AT8hP0E/YT+BQNFA8UERQTFBUUHxQsFC4UMxRKFFQUXRRkFHsUihSbFJ0UnxSh +FKMUuBTJFMsUzRTPFNEU9hUCFQQVBhUIFQoVDBUPFRAVEhUUFTEVMxU1FTcVORU7FT0VRhVIFU0VTxVR +FW0VhRWdFb4VyhXhFewV8RXzFfUV9xX6FfwV/hYHFgkWChYTFhwWJxYwFjsWSRZTFl8WcBZyFnQWdhZ4 +FpkWoRa1FsAWzhbYFuUW7BbuFvAW9Rb3FvwW/hcAFwIXDxcbFx0XHxchFzAXMRc+F00XTxdRF1MXWxdt +F3YXexeOF5sXnRefF6EXtBe9F8IXzRfiF+sX8hgKGBsYHRgfGCEYIxhEGEYYSBhKGEwYTxhQGFIYVBht +GKIYtxjKGN4Y8xkGGQsZDRkPGREZExkVGRcZHBkdGR8ZIRkjGTgZOhk8GT4ZQBlWGYcZkBmlGbQZxhnY +GeEZ7xnxGfYZ+Bn6GfwZ/hoAGgMaBRoKGhEaJxowGjkaRhp7GqEaoxqlGqcaqRqrGq0arxq1Gr4awBrD +GsUa0hraGtwa4RrjGuUa6hrsGu4a/BsoGy8bOBs/G1UbYht4G4EbjBugG6kbthvEG9Ab3BvtG+8b8Rvz +G/UcABwRHBMcFRwXHBkcOhw8HD4cQBxCHEUcRhxIHEocZByVHKscrRyvHLEcsxy1HLccuRy7HL0cwhzL +HN0c3xzoHPMc/B0LHRwdHh0gHSIdJB1ZHWYdcx2JHZcdoR2vHcgd1R3nHfseBR4RHhMeFR4XHhkeGx4k +HiYeKB4qHiweLh4wHkseVR5dHmgecR5zHn4egB6CHoQehh6IHpEekx6eHqAeoh6kHqYeqB6xHrMeth64 +HtAe2R7iHu0fEh8cHx4fIB8iHyQfJh8oHyofMx9MH1kfYh9tH3gfoR+jH6Ufpx+pH7IftB+2H7gfwR/d +H+Yf6B/rH+0gBiAPIBggJSBGIEggSiBMIE4gTyBRIFMgaiCLIJAgkiCUIJYgmCCaIJ8goSCwIMUgxyDJ +IMsgzSDaIOMg7iD5IQIhCSEhISwhNSE6IU0hVCFlIWchaSFrIW0hfiGAIYIhhCGGIZUhniGgIaMhpSGu +IbMhuCHJIcshzSHPIdEh7SH+IgAiAiIEIgYiHiI/IkkiUyJdInwifiKAIoIihCKGIogiiiKoIq4ixSLS +ItQi1yLZItwi3iL8IwUjCiMTIxojMiNPI1EjUyNVI1cjWSNbI3EjfiOfI6EjoyOlI6cjqSOrI60jzCPk +I/Ej8yP2I/gj+yP9JB4kICQiJCQkJiQoJCokLCRLJGMkcCRyJHUkdyR6JHwknSSfJKEkoySlJKckqSSr +JMok4iTvJPEk9CT2JPkk+yUcJR4lICUiJSQlJiUoJSolSiVjJXAlciV1JXcleiV8JZ0lnyWhJaMlpSWn +JaklqyXJJdYl5CXxJfMl9iX4Jfsl/SYWJjAmUSZTJlUmVyZZJlsmXSZfJn8mmCalJqcmqiasJq8msSbS +JtQm1ibYJtom3CbeJuAm/ycXJyQnJicpJysnLicwJ1EnUydVJ1cnWSdbJ10nXydsJ38ngSeDJ4QnjSeP +J5InlCeqJ7MnuifVJ+IoBigjKDAoMig1KDcoOig9KFYoXyhiKKkoqyitKK8osSizKLUotyi5KLsovSi/ +KMEowyjFKMcoySjLKM0ozyjRKNMo1SjXKNko2yjdKN8o4SjkKOYo6CjqKOwo7ij3KPko/CkKKRMpGCkh +KSQpayltKW8pcSlzKXUpdyl5KXspfSl/KYEpgymFKYcpiSmLKY0pjymRKZMplSmXKZkpmymdKZ8poSmj +KaUppympKasprSmvKbgpuyoEKgYqCCoKKgwqDioQKhIqFCoWKhgqGiocKh4qICoiKiQqJiooKioqLCou +KjAqMio0KjYqOCo6KjwqPipBKkMqRSpHKkkqSypUKlcqoCqjKqYqqSqsKq8qsiq1Krgquyq+KsEqxCrH +KsoqzSrQKtMq1irZKtwq3yriKuUq6CrrKu4q8Sr0Kvcq+ir9KwArAysGKwkrFis2K0MrYSt+K4grqCvI +K98sIiw5LFAsciySLLIs0izoLPwtGy04LU4tZS2FLZItqi3CLeUt/S4dLikuPS5JLl0ucS6RLpounS6i +LqQupi6vLrIuty65LrsuxC7HLzwvPi9AL0IvRC9GL0gvSi9ML04vUC9SL1QvVi9YL1ovXC9eL2AvYi9k +L2YvaC9qL2wvbi9wL3IvdC92L3gvei98L34vgC+CL4Qvhi+IL4ovjC+OL5Avki+UL5YvmC+aL5wvni+g +L6MvpS+nL6kvqy+tL68vuC+7MDAwMzA2MDkwPDA/MEIwRTBIMEswTjBRMFQwVzBaMF0wYDBjMGYwaTBs +MG8wcjB1MHgwezB+MIEwhDCHMIowjTCQMJMwljCZMJwwnzCiMKUwqDCrMK4wsTC0MLcwujC9MMAwwzDG +MMkwzDDPMNIw1TDYMNow3DDeMOAw4jDkMOYw6DDqMOww7jDwMPIw9DD2MPgw+jD8MP4xADECMQQxBjEI +MQoxDDEOMRAxEjEUMRYxGDEaMRwxHjEgMSIxJDEmMSgxKjEsMS4xMDEyMTQxPTE/MUExQzFFMUcxUDFS +MVMxXDFfMWAxaTFsMW0xdjF7AAAAAAAAAgIAAAAAAAAF+AAAAAAAAAAAAAAAAAAAMYo diff --git a/Spotlight/SpotlightTransformers.h b/Spotlight/SpotlightTransformers.h index df12b5c9e..338948047 100644 --- a/Spotlight/SpotlightTransformers.h +++ b/Spotlight/SpotlightTransformers.h @@ -19,9 +19,10 @@ @end @interface AuthorToArtistTransformer: NSValueTransformer {} - @end @interface PathToURLTransformer: NSValueTransformer {} +@end +@interface StringToSearchScopeTransformer: NSValueTransformer {} @end \ No newline at end of file diff --git a/Spotlight/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m index 3f7e841ef..77f7afe1b 100644 --- a/Spotlight/SpotlightTransformers.m +++ b/Spotlight/SpotlightTransformers.m @@ -69,4 +69,19 @@ static SpotlightWindowController * searchController; return [value path]; } +@end + +@implementation StringToSearchScopeTransformer + ++ (Class)transformedValueClass { return [NSArray class]; } ++ (BOOL)allowsReverseTransformation { return NO; } + +// Convert from URL string to Search Scope +- (id)transformedValue:(id)value { + if (value == nil) return nil; + + NSURL *scope = [NSURL URLWithString:value]; + return [NSArray arrayWithObject: scope]; +} + @end \ No newline at end of file diff --git a/Spotlight/SpotlightWindowController.h b/Spotlight/SpotlightWindowController.h index 8193f5850..13c498022 100644 --- a/Spotlight/SpotlightWindowController.h +++ b/Spotlight/SpotlightWindowController.h @@ -17,7 +17,6 @@ IBOutlet NSSearchField *searchField; NSMetadataQuery *query; NSString *searchString; - NSString *spotlightSearchPath; } - (IBAction)addToPlaylist:(id)sender; @@ -30,6 +29,5 @@ @property(retain) NSMetadataQuery *query; @property(copy) NSString *searchString; -@property(copy) NSString *spotlightSearchPath; @end diff --git a/Spotlight/SpotlightWindowController.m b/Spotlight/SpotlightWindowController.m index 9624c643c..25fb5f2ed 100644 --- a/Spotlight/SpotlightWindowController.m +++ b/Spotlight/SpotlightWindowController.m @@ -42,16 +42,22 @@ static NSPredicate * musicOnlyPredicate = nil; // Register value transformers NSValueTransformer *pausingQueryTransformer = [[[PausingQueryTransformer alloc]init]autorelease]; [NSValueTransformer setValueTransformer:pausingQueryTransformer forName:@"PausingQueryTransformer"]; + NSValueTransformer *authorToArtistTransformer = [[[AuthorToArtistTransformer alloc]init]autorelease]; [NSValueTransformer setValueTransformer:authorToArtistTransformer forName:@"AuthorToArtistTransformer"]; + NSValueTransformer *pathToURLTransformer = [[[PathToURLTransformer alloc]init]autorelease]; [NSValueTransformer setValueTransformer:pathToURLTransformer forName:@"PathToURLTransformers"]; + + NSValueTransformer *stringToSearchScopeTransformer = [[[StringToSearchScopeTransformer alloc]init]autorelease]; + [NSValueTransformer setValueTransformer:stringToSearchScopeTransformer forName:@"StringToSearchScopeTransformer"]; + } - (id)init { if (self = [super initWithWindowNibName:@"SpotlightPanel"]) { - self.query = [[NSMetadataQuery alloc] init]; + self.query = [[[NSMetadataQuery alloc]init]autorelease]; [self.query setDelegate:self]; self.query.sortDescriptors = [NSArray arrayWithObjects: [[NSSortDescriptor alloc]initWithKey:@"kMDItemAuthors" @@ -65,6 +71,17 @@ static NSPredicate * musicOnlyPredicate = nil; selector:@selector(compareTrackNumbers:)], nil]; + // We want to bind the query's search scope to the user default that is + // set from the NSPathControl. + NSDictionary *bindOptions = + [NSDictionary dictionaryWithObject:@"StringToSearchScopeTransformer" + forKey:NSValueTransformerNameBindingOption]; + + [self.query bind:@"searchScopes" + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:@"values.spotlightSearchPath" + options:bindOptions]; + // hook my query transformer up to me [PausingQueryTransformer setSearchController:self]; } @@ -234,9 +251,8 @@ static NSPredicate * musicOnlyPredicate = nil; - (void)dealloc { - [self.query stopQuery]; - [self.query release]; - [self.searchString release]; + self.query = nil; + self.searchString = nil; [musicOnlyPredicate release]; [super dealloc]; } @@ -277,27 +293,4 @@ replacementObjectForResultObject:(NSMetadataItem*)result } } -@dynamic spotlightSearchPath; -// getter reads from user defaults -- (NSString *)spotlightSearchPath -{ - return [[[NSUserDefaults standardUserDefaults] - stringForKey:@"spotlightSearchPath"]copy]; -} -// Normally, our NSPathcontrol would just bind to the user defaults -// However, this does not allow us to perform a new search when -// the path changes. This getter/setter combo wraps the user -// defaults while performing a new search when the value changes. -- (void)setSpotlightSearchPath:(NSString *)aString -{ - // Make sure the string is changed - if (![spotlightSearchPath isEqualToString: aString]) - { - spotlightSearchPath = [aString copy]; - [[NSUserDefaults standardUserDefaults] setObject:spotlightSearchPath - forKey:@"spotlightSearchPath"]; - [self performSearch]; - } -} - @end