From 464ddf269df1669d6d9d324e5bd779e1e06d373d Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sun, 21 Sep 2008 02:52:24 -0700 Subject: [PATCH] A number of fixes for Cib. Reviewed by rossco. --- AppKit/CPDocument.j | 4 +- AppKit/CPDocumentController.j | 39 +++- AppKit/CPResponder.j | 2 +- AppKit/CPView.j | 5 + AppKit/Cib/CPCustomView.j | 64 +++--- AppKit/Cib/_CPCibKeyedUnarchiver.j | 33 +-- AppKit/Cib/_CPCibObjectData.j | 19 +- Foundation/CPString.j | 2 +- Tools/NibApp/HelloWorld.nib/info.nib | 1 - Tools/NibApp/HelloWorld.nib/keyedobjects.nib | Bin 4087 -> 4049 bytes Tools/NibApp/HelloWorld.xib | 215 ++++++++++--------- 11 files changed, 213 insertions(+), 171 deletions(-) diff --git a/AppKit/CPDocument.j b/AppKit/CPDocument.j index 2e53ce40a..cff5335eb 100644 --- a/AppKit/CPDocument.j +++ b/AppKit/CPDocument.j @@ -200,7 +200,7 @@ var CPDocumentUntitledCount = 0; - (CPData)dataOfType:(CPString)aType error:({CPError})anError { [CPException raise:CPUnsupportedMethodException - reason:"This method must be overridden by the document"]; + reason:"dataOfType:error: must be overridden by the document subclass."]; } /* @@ -215,7 +215,7 @@ var CPDocumentUntitledCount = 0; - (void)readFromData:(CPData)aData ofType:(CPString)aType error:(CPError)anError { [CPException raise:CPUnsupportedMethodException - reason:"This method must be overridden by the document"]; + reason:"readFromData:ofType: must be overridden by the document subclass."]; } // Creating and managing window controllers diff --git a/AppKit/CPDocumentController.j b/AppKit/CPDocumentController.j index 80edb065b..dc2c04e33 100644 --- a/AppKit/CPDocumentController.j +++ b/AppKit/CPDocumentController.j @@ -137,9 +137,11 @@ var CPSharedDocumentController = nil; var result = [self documentForURL:anAbsoluteURL]; if (!result) - // FIXME: type(!) - result = [self makeDocumentWithContentsOfURL:anAbsoluteURL ofType:[[_documentTypes objectAtIndex:0] objectForKey:@"CPBundleTypeName"] delegate:self didReadSelector:@selector(document:didRead:contextInfo:) contextInfo:nil]; - + { + var type = [self typeForContentsOfURL:anAbsoluteURL error:anError]; + + result = [self makeDocumentWithContentsOfURL:anAbsoluteURL ofType:type delegate:self didReadSelector:@selector(document:didRead:contextInfo:) contextInfo:[CPDictionary dictionaryWithObject:shouldDisplay forKey:@"shouldDisplay"]]; + } else if (shouldDisplay) [result showWindows]; @@ -200,6 +202,9 @@ var CPSharedDocumentController = nil; [self addDocument:aDocument]; [aDocument makeWindowControllers]; + + if ([aContextInfo objectForKey:@"shouldDisplay"]) + [aDocument showWindows]; } /* @@ -240,6 +245,34 @@ var CPSharedDocumentController = nil; [_documents removeObjectIdenticalTo:aDocument]; } +- (CPString)defaultType +{ + return [_documentTypes[0] objectForKey:@"CPBundleTypeName"]; +} + +- (CPString)typeForContentsOfURL:(CPURL)anAbsoluteURL error:(CPError)outError +{ + var index = 0, + count = _documentTypes.length, + + extension = [[anAbsoluteURL pathExtension] lowercaseString]; + + for (; index < count; ++index) + { + var documentType = _documentTypes[index], + extensions = [documentType objectForKey:@"CFBundleTypeExtensions"], + extensionIndex = 0, + extensionCount = extensions.length; + + for (; extensionIndex < extensionCount; ++extensionIndex) + if ([extensions[extensionIndex] lowercaseString] == extension) + return [documentType objectForKey:@"CPBundleTypeName"]; + } + + // FIXME? + return [self defaultType];//nil; +} + // Managing Document Types /* @ignore */ diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 34e177677..406dbb43e 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -301,7 +301,7 @@ var CPResponderNextResponderKey = @"CPResponderNextResponderKey"; */ - (id)initWithCoder:(CPCoder)aCoder { - self = [self init]; + self = [super init]; if (self) _nextResponder = [aCoder decodeObjectForKey:CPResponderNextResponderKey]; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 481cce508..c6ff80a1c 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -161,6 +161,11 @@ var DOMElementPrototype = nil, _CPViewNotificationCenter = [CPNotificationCenter defaultCenter]; } +- (id)init +{ + return [self initWithFrame:CGRectMakeZero()]; +} + /* Initializes the receiver for usage with the specified bounding rectangle @return the initialized view diff --git a/AppKit/Cib/CPCustomView.j b/AppKit/Cib/CPCustomView.j index e1755d2b5..c0c70fce2 100644 --- a/AppKit/Cib/CPCustomView.j +++ b/AppKit/Cib/CPCustomView.j @@ -22,17 +22,6 @@ import "CPView.j" -var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", - CPViewAutoresizesSubviewsKey = @"CPViewAutoresizesSubviews", - CPViewBackgroundColorKey = @"CPViewBackgroundColor", - CPViewBoundsKey = @"CPViewBoundsKey", - CPViewFrameKey = @"CPViewFrameKey", - CPViewHitTestsKey = @"CPViewHitTestsKey", - CPViewIsHiddenKey = @"CPViewIsHiddenKey", - CPViewOpacityKey = @"CPViewOpacityKey", - CPViewSubviewsKey = @"CPViewSubviewsKey", - CPViewSuperviewKey = @"CPViewSuperviewKey", - CPViewWindowKey = @"CPViewWindowKey"; /* @ignore */ @@ -49,8 +38,23 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; - (id)initWithCoder:(CPCoder)aCoder { - _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey]; + self = [super initWithCoder:aCoder]; + + if (self) + _className = [aCoder decodeObjectForKey:_CPCibCustomViewClassNameKey]; + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + [aCoder encodeObject:_className forKey:_CPCibCustomViewClassNameKey]; +} + +- (id)_cibInstantiate +{ var theClass = CPClassFromString(_className); // If we don't have this class, just use CPView. @@ -62,37 +66,31 @@ var _CPCibCustomViewClassNameKey = @"_CPCibCustomViewClassNameKey"; theClass = [CPView class]; } - var frame = [aCoder decodeRectForKey:CPViewFrameKey]; - - self = [[CPView alloc] initWithFrame:frame]; + var view = [[theClass alloc] initWithFrame:[self frame]]; - if (self) - { - [self _setWindow:[aCoder decodeObjectForKey:CPViewWindowKey]]; + if (view) + { + [view setBounds:[self bounds]]; // Since the object replacement logic hasn't had a chance to kick in yet, we need to do it manually: - var subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey], + var subviews = [self subviews], index = 0, count = subviews.length; for (; index < count; ++index) - { - // This is a bogus superview "_CPCibCustomView". - subviews[index]._superview = nil; - [self addSubview:subviews[index]]; - } - - _autoresizingMask = [aCoder decodeIntForKey:CPViewAutoresizingMaskKey]; - _autoresizesSubviews = [aCoder decodeBoolForKey:CPViewAutoresizesSubviewsKey]; - - _hitTests = [aCoder decodeObjectForKey:CPViewHitTestsKey]; - _isHidden = [aCoder decodeObjectForKey:CPViewIsHiddenKey]; - _opacity = [aCoder decodeIntForKey:CPViewOpacityKey]; + [view addSubview:subviews[index]]; + + [view setAutoresizingMask:[self autoresizingMask]]; + [view setAutoresizesSubviews:[self autoresizesSubviews]]; - [self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]]; + [view setHitTests:[self hitTests]]; + [view setHidden:[self isHidden]]; + [view setAlphaValue:[self alphaValue]]; + + [view setBackgroundColor:[self backgroundColor]]; } - return self; + return view; } @end diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j index f962d2be6..3776cc5a8 100644 --- a/AppKit/Cib/_CPCibKeyedUnarchiver.j +++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j @@ -6,24 +6,22 @@ import { } -- (id)decodeObjectForKey:(CPString)aKey +- (id)initForReadingWithData:(CPData)data { - var object = [super decodeObjectForKey:aKey]; + self = [super initForReadingWithData:data]; - if ([object respondsToSelector:@selector(_cibInstantiate)]) - { - var index = [[_plistObject objectForKey:aKey] objectForKey:_CPKeyedArchiverUIDKey], - processedObject = [object _cibInstantiate]; - - if (processedObject != object) - { - object = processedObject; - - [self replaceObjectAtUID:index withObject:processedObject]; - } - } + if (self) + [self setDelegate:self]; - return object; + return self; +} + +- (id)unarchiver:(CPKeyedUnarchiver)aKeyedUnarchiver didDecodeObject:(id)anObject +{ + if ([anObject respondsToSelector:@selector(_cibInstantiate)]) + return [anObject _cibInstantiate]; + + return anObject; } - (void)replaceObjectAtUID:(int)aUID withObject:(id)anObject @@ -31,4 +29,9 @@ import _objects[aUID] = anObject; } +- (id)objectAtUID:(int)aUID +{ + return _objects[aUID]; +} + @end \ No newline at end of file diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 0e43193ab..736d18265 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -58,27 +58,30 @@ import "_CPCibConnector.j" CPSet _visibleWindows; } -/* + - (CPArray)topLevelObjects { - var count = [_objectsValues count]; - + var count = [_objectsValues count], + topLevelObjects = []; + var str = ""; + str2 = " "; while (count--) - { + {str2 += _namesValues[count] +"\n"; var eachObject = _objectsValues[count]; - if(eachObject == _fileOwner) + if (eachObject == _fileOwner) { var anObject = _objectsKeys[count]; if (anObject != _fileOwner) - topLevelObjects.push(anObject); + {str += _namesValues[count] + "\n"; + anObject.realname = _namesValues[count];str2+='X'+'\n'; + topLevelObjects.push(anObject);} } } - + alert(str2+'\n'+str); return topLevelObjects; } -*/ @end diff --git a/Foundation/CPString.j b/Foundation/CPString.j index efa7c7ecb..691a9ee1b 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -469,7 +469,7 @@ CPNumericSearch */ - (CPString)pathExtension { - return substr(lastIndexOf('.')+1); + return substr(lastIndexOf('.') + 1); } - (CPString)lastPathComponent diff --git a/Tools/NibApp/HelloWorld.nib/info.nib b/Tools/NibApp/HelloWorld.nib/info.nib index d92bee152..e6ff1f2ef 100644 --- a/Tools/NibApp/HelloWorld.nib/info.nib +++ b/Tools/NibApp/HelloWorld.nib/info.nib @@ -9,7 +9,6 @@ IBOpenObjects 1 - 10 IBSystem Version 9F33 diff --git a/Tools/NibApp/HelloWorld.nib/keyedobjects.nib b/Tools/NibApp/HelloWorld.nib/keyedobjects.nib index acebe2aa01ffb8ede7a87325d27929eefad4d8cf..44157a897a5362ecf97855233c68e2cfee0e805d 100644 GIT binary patch delta 2616 zcma)7X;c(f7QVOkdiBskz$A)*VnoCRagB%yC=!=;K~WS%z!qCu8k$BFmwt>o#uybX zMf4a)0gX-~i5lam87F5#OeT|=#BB)TGDeA$Wim-lCQ;)uue%S#{F|zC>Q&Xb@4Mgo z?swn&De`<|USwE-zri)Q z7T4hmxDhuW?}Ll6YYrR6#N-4};PUxL}t4zghm#6b?sgWMdmy)DCLU*?%=FDY^r&bPa*A}Opp z#|#QaV06}sfkWeaM0g6pq!wF*puhYqQcV z^8~zg0N#R=0o^%zN~y==D$KHFr1Cj#moqTy6r8Sw({Kh7=h`wRmU?pYoc3h5J9jzP z$3F(b{s?Dl;Vk^gdRy)6Er&m|hy(C0G{Ads4&G$3AuT8CwrDVPGH@$OYHgFNHZLT^Ic_uj2GZy zEnI|4keFkJa)}&ylS(~KyC>CUP1ZVjTeCFsEKM9HhQlO$`h-!kAc2>>8Lq-LUhwPu z?VoUy^<@27EbGh1c-F7gFSmVuX<@yZe&v@eKK%|fa?gATU->=L%)kCK-Ig&ew;+fo z?84$$Z=FNMSOt1S;{W53|8kGC1U$mHKlt5;d!v{2jvhW4euf8i@E}mHY+k0)5|3+1 zCO70XpDTZn_A#WuN)*^2X0lK=Fw5oU9mvHQ<`)iSRBBOyOV&;;qD`h0h(v?SWOA8? zWS04L{xxC?2Ky0vvFB#{5!2kovMP)aE6)h`W-Z`- zneQmccg;>NdSbBw(WbJbeXaDTKk+`3CDrrR@h!W73+a=!5#HwwbuO?h-b_9TdT>#F z634Kiyu}6w7TAjC;20RWi0|-DT!Mw@!Xhk2HM63kQr`*kcfOJ17ObqnN^39e85hgXr*eMc zynt1B2pjMMUdJ!-t{@7*LLVVfunF^oa$&8oRj{mo(`fHm;X~mg;qSs#p+)#cxFL$fX2~w&wU79N`lAKbZR4kQ9tEKhQW@(4CUpg(lD}5j}%aW|fnoMLWxAV%T+(C|! z6Xb#NV0oxKOiq=@$m#Mpxj=TwOJyd%ByW~0hL)zo0M zquND{P`xo~yqctrQ!~`LYJpm;ma7$NrCP1-R}ZNt)H7;>dQLsBUQ{oujcSwHtbVQD z*F??Gg0%Kpuoj|4X|Y=~ zYE4?Rc1^pX-PAtQZfl=w|MKdBK0qI&57D2~6ZIs0q&{BH)N}NOdZ}KnZ`3#GTlB5E zrN68n)Q{-z>Hp9_)vxGR_3L_z{-b_Zzpp>g9}z-ANEqosdXiqGH|a~_Ndg&229uE_ znWT~_WEROG3&|p~f~+E5QbE>`b!0u+KsFNZc2Y$SlUK?niHO3eVjWVOc*kn{0)y6KP#;7w681=>*#@~#O zjq}DujPH#fXfO?-Ve~2b4DFmpyUlLa9#;?}^} I`lMU_2LnywjsO4v delta 2688 zcma)8X;c(f7QVNtx|UZ@Y}^$UT#+a$?gkYBK~!j!RuI93r9}t=LL=^dqj8I46g!UN zmLRBcizaGJoS9?P#3eB?!Es!2oQX4MvJk~xaGlKS?qHnEpQ(3Fy<1gx{qA>PcU53r z;F{^K3^0L181#jHFbD=iG$g|WNP&sseKx!Tr7#=TKpAX+jj#pYf(qCPd&ReRVL!YF z2Zi>Z#Pfdm7(Ris@E5oMm*H>lclZZ<4?n;Sp?M!3qJ%OsG{w^n~76l+79-R79>Omq|%7UX9+iYD6Z_L7WQ zIgZle2{!wz*u3=Y;#8YGwkUmu!=5wOA!K_=p`*y7L7W1pfjjWl!W7$b%Uoc)mAy0u;hbD1u^eitq`^zc@~^*`pnKc_}t~On!Pso+FD)YEBKw z>W|zIu1)twOY0tUg#WoP59Y%HSO_j4coi1GVt5Ufz*1NS%f)`jW9{wOgd&&}g*hHzmSTafP@<9quyly8G_*a|b;-L>{nm9T9) zY=iBv1Kxpf;XSIv=`6?>g+>dTqJlhOog|PHs6Ow2&(SW}T?xBkkK3iS4462t&w!rY zf_nAuxxn{zAMB{~`E+kp0@e57Km{CdpHjNI4uK60!x$I~iEsqQ!FcFOLDYuYlR=CE zNf6n?2M-&%3MOR2Q9+~tYUlHN431aAaX10tX*PR8iPO^zyTdtNfaGx2_xB{V*bb-Q zG@OCY;B)FkU8pOC(#scw-v(d6mv9cg5>yO?^X?m3Q0rhpNr^fqmFDDU6_ono{1q-% z!bP~`?yh$W^_g4|Cb@8xUJ~kl6p~U0P0D7 z#onL#)z@6>;dC8^UGbpT`@cB-2&x6EpTaXQt81VdQQ$Q$JzE59PQ9qNAzXELf3LR< z|34UvnqY99kHI9^D^?%D+%R{9(b|O#&~F?1`8qE;6kSs6ESTXT&^XUL{#vvL%sOo1 z1v8AoQ@vou775M?IK`A=b8JBoJ4LRoJcot={*VZoATl28IY2}Mf+&nkk8UsMjU7m# zA(Lz_dt_l@UQTAZGp8Wm+ZOB$dn#ZLgx7lw@pujVWhDsD)etFQ_bpR+?oL|0ZXb%+ z<;@`Qe{zt1n}sLip)O&7kr;*1I1FPj7KdXTj-Y57Mllpi!zqqN&`27U>cb_-J6SKJ zoEDpt=Ljwi8eN+2C=y4Xk19c3e0#_gtN(A_goaJA1|=4hUXW8MVxK@ZN=!+vn3F?dP6Q4Dl{zsq31Vgj3nV%Tl)DI=Lp_)Xgu=uW zne@Crc^)4#FdqxB5NBc$7NZkOa2A%LYc|foxip5xQX<)D9F3e!G_7?{FjT#WQ#j|A{y8sia9wr7$T%N|dssh0=0&74P8s zP&y)=kj_b8OXsC)QnhqfdL~PGBE1^n1#jZG%LS>G!L@86;$~tAevQgQryrq;YyOcf3 zKIJ{7O1Yw3Q+{$OH%Sy`@%TCJy%Q4G&%eR&q zOReRh<+0_d<=-l(lB%exYN&o{bG4(|R~@8AtMRH$O;%IXRCT&KQ=O$QP#3Dp)HUiB zb+>v@J*u8otJKTtztkG_z9ws?)=Uf3T%ENDElx|&rfMs+mD(z8wN|FNwRPHhZKt+d z+pF!`V3)t76}<`UiTTX@nIo6Eg=^g4 zjd&9tmdAVZzPvvl$iw+y9>F7dG>_rK`3OFWC-5XbfluUVd@`TPGk6xC#;5aKp2zcf kDWAjV^2K}!U&>eWGQO5?;^n?S1(M|3@lD@ef9L!E18 YES - + YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin YES @@ -41,7 +41,7 @@ -2080244224 134217728 - Round Rect Button + Round Rect Button LucidaGrande 1.200000e+01 @@ -133,7 +133,7 @@ -2080244224 134217728 - Round Rect Button + -2038152961 @@ -297,6 +297,7 @@ + Francisco 15 @@ -362,28 +363,28 @@ YES - - - - + + + + {628, 654} {{319, 416}, {480, 272}} - - - com.apple.InterfaceBuilder.CocoaPlugin - {{196, 240}, {480, 270}} - - {{196, 240}, {480, 270}} - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - + + + {{196, 240}, {480, 270}} + + + + + + + + + + + + @@ -438,7 +439,7 @@ IBUserSource - + @@ -448,90 +449,90 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxB2AAsADAAxADUANgA7ADwA +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxB1AAsADAAxADUANgA7ADwA QgBWAFcAWABZAGEAYgBmAGcAagBWAHIACwB7AIAAjACNAKUApgCuAK8AsgCzALcAuwDDAMQAywDMAGEA -CwBmANAA1ADbAOMA5ADoAO0ACwD1APoBAgEDAMsBCgESARMBJwEqASsBLgExAAsAZAEyATUBNgE7ATwB -PwFEAUUBVgFZAVoBXAFtAX8BkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGjAaYBvAHSAdMB -1AEfAdUB1gHXAdgB2QHaAdsB3ACtAd0B3gBUAd8B4AHhAeIB5QHoAetVJG51bGzfEBIADQAOAA8AEAAR -ABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAv -ADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3Np -YmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xh -c3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9y -c11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNj -ZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoB1gEWAXIB0gCiASoAFgFuA -XYBLgHKAAIAGgEmAcxAcgF7SAA4AMgAzADRbTlNDbGFzc05hbWWABIADWE5TT2JqZWN00gA3ADgAOQA6 -WCRjbGFzc2VzWiRjbGFzc25hbWWiADoANV5OU0N1c3RvbU9iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvS -AA4APQA+AD9aTlMub2JqZWN0c4AnogBAAEGAB4AQ2gBDAA4ARABFAEYARwBIAEkASgBLAEwATQBOAE8A -UABRAFIAUwBUACtcTlNXaW5kb3dWaWV3XE5TU2NyZWVuUmVjdF1OU1dpbmRvd1RpdGxlWU5TV1RGbGFn -c11OU1dpbmRvd0NsYXNzXE5TV2luZG93UmVjdF8QD05TV2luZG93QmFja2luZ18QEU5TV2luZG93U3R5 -bGVNYXNrW05TVmlld0NsYXNzgAuAD4AOgAkSJAAAAIAKgAgQAhAPgABfEBh7ezE5NiwgMjQwfSwgezQ4 -MCwgMjcwfX1WV2luZG93WE5TV2luZG931ABaAA4AWwBcACsAXgBfAGBfEA9OU05leHRSZXNwb25kZXJY -TlN2RmxhZ3NbTlNGcmFtZVNpemWAAIANEQEAgAxaezQ4MCwgMjcwfdIANwA4AGMAZKMAZABlADVWTlNW -aWV3W05TUmVzcG9uZGVyXxAWe3swLCAwfSwgezE2ODAsIDEwMjh9fdIANwA4AGgAaaIAaQA1XxAQTlNX -aW5kb3dUZW1wbGF0ZdoAQwAOAEQARQBGAEcASABJAEoASwBrAE0AbQBPAFAAUQBwAFMAVAArgBKAD4Am -gAmACoARgADXAFoADgBzAFsAXABYAHQAdQBeAHcAXwB4AHUAelpOU1N1YnZpZXdzW05TU3VwZXJ2aWV3 -gBOADYAUgCSAE4Al0gAOAD0AfAB9gCOiAH4Af4AVgB/YAFoADgCBAIIAWwCDAFgAdABrAIUAhgCHAIgA -iQB1AGtXTlNGcmFtZVZOU0NlbGxZTlNFbmFibGVkgBKAHoAWgBcRAQwJgBOAEl8QF3t7MTQ1LCAxMTN9 -LCB7MTU0LCAxOX193ACOAA4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AmwCfAKAAfgCiAKMA -pFtOU0NlbGxGbGFnc18QE05TQWx0ZXJuYXRlQ29udGVudHNfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNC -dXR0b25GbGFnczJfEA9OU0tleUVxdWl2YWxlbnRaTlNDb250ZW50c1lOU1N1cHBvcnRdTlNDb250cm9s -Vmlld18QD05TUGVyaW9kaWNEZWxheVxOU0NlbGxGbGFnczJdTlNCdXR0b25GbGFncxP/////hAH+AIAd -gBwQSxCkgByAGIAZgBURAZASCAAAABP/////hoRA/1Z5aWtlcyHUAA4ApwCoAKkAqgCrAKwArVZOU1Np -emVWTlNOYW1lWE5TZkZsYWdzgBsjQCgAAAAAAACAGhAQXEx1Y2lkYUdyYW5kZdIANwA4ALAAsaIAsQA1 -Vk5TRm9udFDSADcAOAC0ALWkALUAtgCCADVcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4ALgA -uaUAuQC6AGQAZQA1WE5TQnV0dG9uWU5TQ29udHJvbNgAWgAOAIEAggBbAIMAWAB0AGsAhQC+AL8AiACJ -AHUAa4ASgB6AIIAhCYATgBJfEBV7ezAsIDI1MX0sIHsxNTQsIDE5fX3cAI4ADgCPAJAAkQCSAJMAlACV -AJYAlwCYAJkAmgCbAJwAnQCbAMgAoAB/AKIAowCkgB2AHIAcgCKAGYAfXxARUm91bmQgUmVjdCBCdXR0 -b27SADcAOADNAM6jAM4AzwA1Xk5TTXV0YWJsZUFycmF5V05TQXJyYXnSADcAOADRANKjANIA0wA1XE5T -TXV0YWJsZVNldFVOU1NldNIADgA9AHwA1oAjpADXANgA2QDagCmALIBAgEPUAA4A3ADdAN4A3wBBAB8A -4l1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAK4AQgAKAKlZ3aW5kb3fSADcAOADlAOajAOYA -5wA1XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4A3ADdAN4A3wDqAB8A7IAr -gC2AAoA/2ABaAA4AcwBbAFwAWAAyAHQA7gDvAPAAiADxAO4A8wD0gC6APoAvgDuALoA9gDzSAA4APQB8 -APeAI6IA+AD5gDCANNgAWgAOAIEAggBbAIMAWAB0AOoAhQD9AP4AiACJAO4A6oAtgB6AMYAyCYAugC1f -EBd7ezE1NywgMTEwfSwgezE1NCwgMTl9fdwAjgAOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaAJsAnACd -AJsBBwCgAPgAogCjAKSAHYAcgByAM4AZgDDYAFoADgCBAIIAWwCDAFgAdADqAQwBDQEOAIgAiQDuAOqA -LYA6gDWANgmALoAtXxAWe3szNTksIDEwOH0sIHs5NiwgMjF9fd4BFACOAA4BFQEWAJMAlACVARcBGACX -ARkBGgEbARwAmQEdAR4BHwCbASEA+QEjASQBHgElASQBJVdOU1ZhbHVlXxATTlNOdW1iZXJPZlRpY2tN -YXJrc18QEk5TVGlja01hcmtQb3NpdGlvblpOU01heFZhbHVlWk5TTWluVmFsdWVaTlNWZXJ0aWNhbF1O -U0FsdEluY1ZhbHVlXxAaTlNBbGxvd3NUaWNrTWFya1ZhbHVlc09ubHkjQEkAAAAAAACAORAAEAGAHIA3 -gDQjQFkAAAAAAAAjAAAAAAAAAAAICNQADgCnAKgAqQCqAKsBKQCtgBuAOFlIZWx2ZXRpY2HSADcAOAEs -AS2kAS0AtgCCADVcTlNTbGlkZXJDZWxs0gA3ADgBLwEwpQEwALoAZABlADVYTlNTbGlkZXJaezQ4MCwg -MjcyfdIANwA4ATMBNKQBNABkAGUANVxOU0N1c3RvbVZpZXdUdmlld9QADgDcAN0A3gE3AEEAfgE6gEKA -EIAVgEFZb3JkZXJPdXQ60gA3ADgBPQE+owE+AOcANV8QFU5TTmliQ29udHJvbENvbm5lY3RvctQADgDc -AN0A3gE3AEEA+AFDgEKAEIAwgERbb3JkZXJGcm9udDrSAA4APQFGAUeASK4A+QEOAOoAawCHAL8BTgD+ -AH8AfgBAAEEATAD4gDSANoAtgBKAF4AhgEaAMoAfgBWAB4AQgAuAMNIADgAyADMBWIAEgEddTlNBcHBs -aWNhdGlvbtIANwA4AVsAz6IAzwA10gAOAD0BRgFegEiuAOoA+QAfAEEAfgB/AB8A+ABrAGsAHwAfAEAA -6oAtgDSAAoAQgBWAH4ACgDCAEoASgAKAAoAHgC3SAA4APQFGAW+ASK8QDwD5AGsA6gEOAIcAvwFOAP4A -fwBAAEwAQQB+AB8A+IA0gBKALYA2gBeAIYBGgDKAH4AHgAuAEIAVgAKAMNIADgA9AUYBgYBIrxAPAYIB -gwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQgEyATYBOgE+AUIBRgFKAU4BUgFWAVoBXgFiAWYBaXxAR -SG9yaXpvbnRhbCBTbGlkZXJcQ29udGVudCBWaWV3W0N1c3RvbSBWaWV3W1NsaWRlciBDZWxsXxAUQnV0 -dG9uIENlbGwgKHlpa2VzISlfECFCdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pLTFbQXBwbGlj -YXRpb25fEB9CdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pXxAnUm91bmQgUmVjdCBCdXR0b24g -KFJvdW5kIFJlY3QgQnV0dG9uKS0xXxARV2luZG93IChXaW5kb3cpLTFeQ29udGVudCBWaWV3LTFfEA9X -aW5kb3cgKFdpbmRvdylfEBpSb3VuZCBSZWN0IEJ1dHRvbiAoeWlrZXMhKVxGaWxlJ3MgT3duZXJfECVS -b3VuZCBSZWN0IEJ1dHRvbiAoUm91bmQgUmVjdCBCdXR0b24p0gAOAD0BRgGigEig0gAOAD0BRgGlgEig -0gAOAD0BRgGogEivEBMA2AD5AQ4A6gBrAIcAvwFOANkA2gD+AH8AfgBAAEEATADXAB8A+IAsgDSANoAt -gBKAF4AhgEaAQIBDgDKAH4AVgAeAEIALgCmAAoAw0gAOAD0BRgG+gEivEBMBvwHAAcEBwgHDAcQBxQHG -AccByAHJAcoBywHMAc0BzgHPAdAB0YBfgGCAYYBigGOAZIBlgGaAZ4BogGmAaoBrgGyAbYBugG+AcIBx -EBQQChALEA0QERAaE//////////9EBgQFhAJEBkQDhAMEBUQGxAI0gAOAD0AfAHkgCOg0gAOAD0BRgHn -gEig0gAOAD0BRgHqgEig0gA3ADgB7AHtogHtADVeTlNJQk9iamVjdERhdGEACAAZACIAJwAxADoAPwBE -AFIAVABmAVUBWwGmAa0BtAHCAdQB8AH+AgoCFgIkAi8CPQJZAmcCegKMAqYCsAK9Ar8CwQLDAsUCxwLJ -AssCzQLPAtEC0wLVAtcC2QLbAt0C3wLhAuoC9gL4AvoDAwMMAxUDIAMlAzQDRwNQA1sDXQNiA2QDZgOP -A5wDqQO3A8EDzwPcA+4EAgQOBBAEEgQUBBYEGwQdBB8EIQQjBCUEQARHBFAEYQRzBHwEiASKBIwEjwSR -BJwEpQSsBLMEvwTYBOEE5gT5BSIFJAUmBSgFKgUsBS4FMAVNBVgFZAVmBWgFagVsBW4FcAV5BXsFgAWC -BYQFpQWtBbQFvgXABcIFxAXGBckFygXMBc4F6AYZBiUGOwZQBl8GcQZ8BoYGlAamBrMGwQbKBswGzgbQ -BtIG1AbWBtgG2gbdBuIG6wbyBwMHCgcRBxoHHAclBycHKQc2Bz8HRAdLB0wHVQdeB2sHeAeBB4wHlQef -B8AHwgfEB8YHyAfJB8sHzQflCBYIGAgaCBwIHgggCCIINgg/CEYIVQhdCGYIbQh6CIAIiQiLCJQIlgiY -CJoInAitCLsIxAjMCM4I0AjSCNQI2wjkCOsJAgkRCSIJJAkmCSgJKglLCU0JTwlRCVMJVQlXCVkJYglk -CWkJawltCY4JkAmSCZQJlgmXCZkJmwm1CeYJ6AnqCewJ7gnwCfIKEwoVChcKGQobChwKHgogCjkKcgp6 -CpAKpQqwCrsKxgrUCvEK+gr8Cv4LAAsCCwQLBgsPCxgLGQsaCysLLQsvCzkLQgtLC1gLYQtsC3ULgAuJ -C5ILnwukC7ULtwu5C7sLvQvHC9AL1wvvDAAMAgwEDAYMCAwUDB0MHww8DD4MQAxCDEQMRgxIDEoMTAxO -DFAMUgxUDFYMWAxhDGMMZQxzDHwMgQyKDIwMqQyrDK0MrwyxDLMMtQy3DLkMuwy9DL8MwQzDDMUMzgzQ -DPEM8wz1DPcM+Qz7DP0M/w0BDQMNBQ0HDQkNCw0NDQ8NGA0aDTsNPQ0/DUENQw1FDUcNSQ1LDU0NTw1R -DVMNVQ1XDVkNbQ16DYYNkg2pDc0N2Q37DiUOOQ5IDloOdw6EDqwOtQ63DrgOwQ7DDsQOzQ7PDvgO+g78 -Dv4PAA8CDwQPBg8IDwoPDA8ODxAPEg8UDxYPGA8aDxwPHg8nDykPUg9UD1YPWA9aD1wPXg9gD2IPZA9m -D2gPag9sD24PcA9yD3QPdg94D3oPfA9+D4APgg+ED40Pjw+RD5MPlQ+XD5kPmw+dD58PqA+qD6sPtA+2 -D7cPwA/CD8MPzA/RAAAAAAAAAgIAAAAAAAAB7gAAAAAAAAAAAAAAAAAAD+A +CwBmANAA1ADbAOMA5ADoAO0A9QD9AAsA/gEFAQYBCQEOAQ8BFAEZASEBIgE2ATkBOgE9AUAACwBkAUEB +RAFFAVYBWQFaAVwBbQF/AZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABowGmAbwB0gHTAdQB +1QHWAdcB2AEuAdkAVAHaAdsB3AHdAd4B3wHgAK0B4QHiAeUB6AHrVSRudWxs3xASAA0ADgAPABAAEQAS +ABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAw +Vk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nlc1ZhbHVlc18QGU5TQWNjZXNzaWJp +bGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5c1tOU0ZyYW1ld29ya11OU0NsYXNz +ZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eUNvbm5lY3RvcnNd +TlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09iamVjdHNWYWx1ZXNfEBdOU0FjY2Vz +c2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVzgAKAdIBEgFuAc4AogEmABYBagFyA +SoBxgACABoBIgHIQHIBd0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA1hOU09iamVjdNIANwA4ADkAOlgk +Y2xhc3Nlc1okY2xhc3NuYW1logA6ADVeTlNDdXN0b21PYmplY3RfEBBJQkNvY29hRnJhbWV3b3Jr0gAO +AD0APgA/Wk5TLm9iamVjdHOAJ6IAQABBgAeAENoAQwAOAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAA +UQBSAFMAVAArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RdTlNXaW5kb3dUaXRsZVlOU1dURmxhZ3Nd +TlNXaW5kb3dDbGFzc1xOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxl +TWFza1tOU1ZpZXdDbGFzc4ALgA+ADoAJEiQAAACACoAIEAIQD4AAXxAYe3sxOTYsIDI0MH0sIHs0ODAs +IDI3MH19VldpbmRvd1hOU1dpbmRvd9QAWgAOAFsAXAArAF4AXwBgXxAPTlNOZXh0UmVzcG9uZGVyWE5T +dkZsYWdzW05TRnJhbWVTaXplgACADREBAIAMWns0ODAsIDI3MH3SADcAOABjAGSjAGQAZQA1Vk5TVmll +d1tOU1Jlc3BvbmRlcl8QFnt7MCwgMH0sIHsxNjgwLCAxMDI4fX3SADcAOABoAGmiAGkANV8QEE5TV2lu +ZG93VGVtcGxhdGXaAEMADgBEAEUARgBHAEgASQBKAEsAawBNAG0ATwBQAFEAcABTAFQAK4ASgA+AJoAJ +gAqAEYAA1wBaAA4AcwBbAFwAWAB0AHUAXgB3AF8AeAB1AHpaTlNTdWJ2aWV3c1tOU1N1cGVydmlld4AT +gA2AFIAkgBOAJdIADgA9AHwAfYAjogB+AH+AFYAf2ABaAA4AgQCCAFsAgwBYAHQAawCFAIYAhwCIAIkA +dQBrV05TRnJhbWVWTlNDZWxsWU5TRW5hYmxlZIASgB6AFoAXEQEMCYATgBJfEBd7ezE0NSwgMTEzfSwg +ezE1NCwgMTl9fdwAjgAOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaAJsAnACdAJsAnwCgAH4AogCjAKRb +TlNDZWxsRmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXxASTlNQZXJpb2RpY0ludGVydmFsXk5TQnV0 +dG9uRmxhZ3MyXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29udGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZp +ZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3MyXU5TQnV0dG9uRmxhZ3MT/////4QB/gCAHYAc +EEsQpIAcgBiAGYAVEQGQEggAAAAT/////4aEQP9WeWlrZXMh1AAOAKcAqACpAKoAqwCsAK1WTlNTaXpl +Vk5TTmFtZVhOU2ZGbGFnc4AbI0AoAAAAAAAAgBoQEFxMdWNpZGFHcmFuZGXSADcAOACwALGiALEANVZO +U0ZvbnRQ0gA3ADgAtAC1pAC1ALYAggA1XE5TQnV0dG9uQ2VsbFxOU0FjdGlvbkNlbGzSADcAOAC4ALml +ALkAugBkAGUANVhOU0J1dHRvbllOU0NvbnRyb2zYAFoADgCBAIIAWwCDAFgAdABrAIUAvgC/AIgAiQB1 +AGuAEoAegCCAIQmAE4ASXxAVe3swLCAyNTF9LCB7MTU0LCAxOX193ACOAA4AjwCQAJEAkgCTAJQAlQCW +AJcAmACZAJoAmwCcAJ0AmwDIAKAAfwCiAKMApIAdgByAHIAigBmAH18QEVJvdW5kIFJlY3QgQnV0dG9u +0gA3ADgAzQDOowDOAM8ANV5OU011dGFibGVBcnJheVdOU0FycmF50gA3ADgA0QDSowDSANMANVxOU011 +dGFibGVTZXRVTlNTZXTSAA4APQB8ANaAI6QA1wDYANkA2oApgCyANIA21AAOANwA3QDeAN8AQQAfAOJd +TlNEZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xhYmVsgCuAEIACgCpWd2luZG930gA3ADgA5QDmowDmAOcA +NV8QFE5TTmliT3V0bGV0Q29ubmVjdG9yXk5TTmliQ29ubmVjdG9y1AAOANwA3QDeAOkAQQDrAOyAM4AQ +gC2AMtgAWgAOAIEAggBbAIMAWAB0AO4AhQDwAPEAiACJAPMA7oAugB6AL4AxCYAwgC7YAFoADgBzAFsA +XABYADIAdADzAPcA+ACIAPkA8wD7APyAMIBCgDeAP4AwgEGAQF8QF3t7MTU3LCAxMTB9LCB7MTU0LCAx +OX193ACOAA4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AmwDIAKAA6wCiAKMApIAdgByAHIAi +gBmALVtvcmRlckZyb250OtIANwA4AQcBCKMBCADnADVfEBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4A +3ADdAN4A6QBBAH4BDYAzgBCAFYA1WW9yZGVyT3V0OtQADgDcAN0A3gDfAO4AHwETgCuALoACgEPSAA4A +PQB8ARaAI6IA6wEYgC2AONgAWgAOAIEAggBbAIMAWAB0AO4BGwEcAR0AiACJAPMA7oAugD6AOYA6CYAw +gC5fEBZ7ezM1OSwgMTA4fSwgezk2LCAyMX193gEjAI4ADgEkASUAkwCUAJUBJgEnAJcBKAEpASoBKwCZ +ASwBLQEuAJsBMAEYATIBMwEtATQBMwE0V05TVmFsdWVfEBNOU051bWJlck9mVGlja01hcmtzXxASTlNU +aWNrTWFya1Bvc2l0aW9uWk5TTWF4VmFsdWVaTlNNaW5WYWx1ZVpOU1ZlcnRpY2FsXU5TQWx0SW5jVmFs +dWVfEBpOU0FsbG93c1RpY2tNYXJrVmFsdWVzT25seSNASQAAAAAAAIA9EAAQAYAcgDuAOCNAWQAAAAAA +ACMAAAAAAAAAAAgI1AAOAKcAqACpAKoAqwE4AK2AG4A8WUhlbHZldGljYdIANwA4ATsBPKQBPAC2AIIA +NVxOU1NsaWRlckNlbGzSADcAOAE+AT+lAT8AugBkAGUANVhOU1NsaWRlclp7NDgwLCAyNzJ90gA3ADgB +QgFDpAFDAGQAZQA1XE5TQ3VzdG9tVmlld1R2aWV30gAOAD0BRgFHgEeuAGsAfwEYAEAA7gFNAEwA8QEd +AEEA6wCHAL8AfoASgB+AOIAHgC6ARYALgDGAOoAQgC2AF4AhgBXSAA4AMgAzAViABIBGXU5TQXBwbGlj +YXRpb27SADcAOAFbAM+iAM8ANdIADgA9AUYBXoBHrgBBAGsA7gAfAB8AHwBAAOsBGAAfAO4AfgB/AGuA +EIASgC6AAoACgAKAB4AtgDiAAoAugBWAH4AS0gAOAD0BRgFvgEevEA8AawB/ARgAQADuAU0ATADxAR0A +QQAfAOsAvwB+AIeAEoAfgDiAB4AugEWAC4AxgDqAEIACgC2AIYAVgBfSAA4APQFGAYGAR68QDwGCAYMB +hAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkIBLgEyATYBOgE+AUIBRgFKAU4BUgFWAVoBXgFiAWVxDb250 +ZW50IFZpZXdfECdSb3VuZCBSZWN0IEJ1dHRvbiAoUm91bmQgUmVjdCBCdXR0b24pLTFfEBFIb3Jpem9u +dGFsIFNsaWRlcllGcmFuY2lzY29bQ3VzdG9tIFZpZXdbQXBwbGljYXRpb25eQ29udGVudCBWaWV3LTFf +EB9CdXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pW1NsaWRlciBDZWxsXxAPV2luZG93IChXaW5k +b3cpXEZpbGUncyBPd25lcl8QJVJvdW5kIFJlY3QgQnV0dG9uIChSb3VuZCBSZWN0IEJ1dHRvbilfECFC +dXR0b24gQ2VsbCAoUm91bmQgUmVjdCBCdXR0b24pLTFfEBpSb3VuZCBSZWN0IEJ1dHRvbiAoeWlrZXMh +KV8QFEJ1dHRvbiBDZWxsICh5aWtlcyEp0gAOAD0BRgGigEeg0gAOAD0BRgGlgEeg0gAOAD0BRgGogEev +EBMAawB/ARgA2gDYAEAA2QDuAU0ATADXAPEBHQBBAB8A6wCHAH4Av4ASgB+AOIA2gCyAB4A0gC6ARYAL +gCmAMYA6gBCAAoAtgBeAFYAh0gAOAD0BRgG+gEevEBMBvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHM +Ac0BzgHPAdAB0YBegF+AYIBhgGKAY4BkgGWAZoBngGiAaYBqgGuAbIBtgG6Ab4BwEA0QGRAKEBQQFhAO +EBgT//////////0QFRAJEAsQDBAbEAgQERAa0gAOAD0AfAHkgCOg0gAOAD0BRgHngEeg0gAOAD0BRgHq +gEeg0gA3ADgB7AHtogHtADVeTlNJQk9iamVjdERhdGEACAAZACIAJwAxADoAPwBEAFIAVABmAVMBWQGk +AasBsgHAAdIB7gH8AggCFAIiAi0COwJXAmUCeAKKAqQCrgK7Ar0CvwLBAsMCxQLHAskCywLNAs8C0QLT +AtUC1wLZAtsC3QLfAugC9AL2AvgDAQMKAxMDHgMjAzIDRQNOA1kDWwNgA2IDZAONA5oDpwO1A78DzQPa +A+wEAAQMBA4EEAQSBBQEGQQbBB0EHwQhBCMEPgRFBE4EXwRxBHoEhgSIBIoEjQSPBJoEowSqBLEEvQTW +BN8E5AT3BSAFIgUkBSYFKAUqBSwFLgVLBVYFYgVkBWYFaAVqBWwFbgV3BXkFfgWABYIFowWrBbIFvAW+ +BcAFwgXEBccFyAXKBcwF5gYXBiMGOQZOBl0GbwZ6BoQGkgakBrEGvwbIBsoGzAbOBtAG0gbUBtYG2Abb +BuAG6QbwBwEHCAcPBxgHGgcjByUHJwc0Bz0HQgdJB0oHUwdcB2kHdgd/B4oHkwedB74HwAfCB8QHxgfH +B8kHywfjCBQIFggYCBoIHAgeCCAINAg9CEQIUwhbCGQIawh4CH4IhwiJCJIIlAiWCJgImgirCLkIwgjK +CMwIzgjQCNII2QjiCOkJAAkPCSAJIgkkCSYJKAlJCUsJTQlPCVEJUglUCVYJdwl5CXsJfQl/CYEJgwmF +CZ8J0AnSCdQJ1gnYCdoJ3AnoCfEJ+AoQCiEKIwolCicKKQozCkQKRgpICkoKTApVClcKXApeCmAKgQqD +CoUKhwqJCooKjAqOCqcK4AroCv4LEwseCykLNAtCC18LaAtqC2wLbgtwC3ILdAt9C4YLhwuIC5kLmwud +C6cLsAu5C8YLzwvaC+ML7gv3DAAMDQwSDBsMHQw6DDwMPgxADEIMRAxGDEgMSgxMDE4MUAxSDFQMVgxf +DGEMYwxxDHoMfwyIDIoMpwypDKsMrQyvDLEMswy1DLcMuQy7DL0MvwzBDMMMzAzODO8M8QzzDPUM9wz5 +DPsM/Qz/DQENAw0FDQcNCQ0LDQ0NFg0YDTkNOw09DT8NQQ1DDUUNRw1JDUsNTQ1PDVENUw1VDVcNZA2O +DaINrA24DcQN0w31DgEOEw4gDkgObA6JDqAOqQ6rDqwOtQ63DrgOwQ7DDuwO7g7wDvIO9A72DvgO+g78 +Dv4PAA8CDwQPBg8IDwoPDA8ODxAPEg8bDx0PRg9ID0oPTA9OD1APUg9UD1YPWA9aD1wPXg9gD2IPZA9m +D2gPag9sD24PcA9yD3QPdg94D3oPgw+FD4cPiQ+LD40Pjw+RD5MPnA+eD58PqA+qD6sPtA+2D7cPwA/F +AAAAAAAAAgIAAAAAAAAB7gAAAAAAAAAAAAAAAAAAD9Q