From f339198d146832f122f29492bd0b0c266c84baf0 Mon Sep 17 00:00:00 2001 From: Blake Watters Date: Sat, 18 May 2013 14:45:27 -0400 Subject: [PATCH] Add test coverage and fix for "Stream XXX is sending an event before being opened" during multi-part file uploads. fixes #948 --- AFNetworking/AFHTTPClient.m | 19 +++++++++++++++---- Tests/AFHTTPClientTests.m | 12 ++++++++++++ Tests/abide.jpg | Bin 0 -> 39038 bytes 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 Tests/abide.jpg diff --git a/AFNetworking/AFHTTPClient.m b/AFNetworking/AFHTTPClient.m index 1cbc283..bc45b4f 100644 --- a/AFNetworking/AFHTTPClient.m +++ b/AFNetworking/AFHTTPClient.m @@ -1067,11 +1067,22 @@ static const NSUInteger AFMultipartBodyStreamProviderDefaultBufferLength = 4096; #pragma mark - NSStreamDelegate -- (void)stream:(NSStream __unused *)stream - handleEvent:(NSStreamEvent)eventCode -{ +/** + This retry works around a nasty problem in which mutli-part uploads will fail due to the stream delegate being sent a `NSStreamEventHasSpaceAvailable` event before the input stream has finished opening. This workaround simply replays the event after allowing the run-loop to cycle, providing enough time for the input stream to finish opening. It appears that this bug is in the CFNetwork layer. (See https://github.com/AFNetworking/AFNetworking/issues/948) + */ +- (void)retryWrite:(NSStream *)stream { + [self stream:stream handleEvent:NSStreamEventHasSpaceAvailable]; +} + +- (void)stream:(NSStream *)stream + handleEvent:(NSStreamEvent)eventCode { if (eventCode & NSStreamEventHasSpaceAvailable) { - [self handleOutputStreamSpaceAvailable]; + if (self.inputStream.streamStatus < NSStreamStatusOpen) { + // See comments in `retryWrite:` for details + [self performSelector:@selector(retryWrite:) withObject:stream afterDelay:0.1]; + } else { + [self handleOutputStreamSpaceAvailable]; + } } } diff --git a/Tests/AFHTTPClientTests.m b/Tests/AFHTTPClientTests.m index 0ba0032..31e65e4 100644 --- a/Tests/AFHTTPClientTests.m +++ b/Tests/AFHTTPClientTests.m @@ -199,4 +199,16 @@ expect(responseDictionary[@"form"]).to.equal(@{ @"key": @"value" }); } +- (void)testMultipartUploadDoesNotFailDueToStreamSentAnEventBeforeBeingOpenedError { + NSString *pathToImage = [[NSBundle bundleForClass:[AFHTTPClient class]] pathForResource:@"abide" ofType:@"jpg"]; + NSData *imageData = [NSData dataWithContentsOfFile:pathToImage]; + NSMutableURLRequest *request = [self.client multipartFormRequestWithMethod:@"POST" path:@"/post" parameters:@{ @"this": @"that" } constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileData:imageData name:@"item[photos_attributes][][photo]" fileName:@"item-image.png" mimeType:@"image/jpg"]; + }]; + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + [self.client enqueueHTTPRequestOperation:operation]; + expect(operation.isFinished).will.beTruthy(); + expect(operation.error).notTo.equal(NSURLErrorTimedOut); +} + @end diff --git a/Tests/abide.jpg b/Tests/abide.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6358ad3b3858937058936b0643e2e939a6fa91be GIT binary patch literal 39038 zcmbsQbx<79w>FFpFnDlFu;4I*yAvD+XRzRb0KsO^K@uRi1b24^cefCNdvF^dIKdqP zv5((5^`2ATTXp}q_wKHms_x#s*Y2rWPe1EfYyDgPw+SFtQ-&x5(9qBTs!s>t9}1uV zz{CIoff$%iKbV-9SlG{Su%8AIK0fX<5+YJk5+V{3GD=!1GIDAP5|ZbP&#CF?UcP)u zM#aR!M9)G?|C0Vci=aI{ij9R$h=W5&PfkKk|Nr&)*9#!QL0d+X!9ZgIpp&3skf8k= z0MG#dXqZpCMFafL06uLI2Ll}q_vyAdF#ru6h=GBHjf+Ew3&cQsI>i70F-fpU8TsXO zvB{XM+=6h(sRR-W8<<7p4UtV>XXYp;GdLfCWIq0AgaJ<2>D!C3!kQ2clzPW8$D={AbpaagrzN z|79DC?8$T@Ig>zP!`B%KA*lNWHnY5*b>r40r67w!QZVbkRlu{S4WpAhJ@X1MPb~N1 zx{oteLobB03aRsMx^KNfPLH52OIsvKb%J0NJbO?5oUF0Y{c@_Nk&WGCwyR62Qm_uz zT!Rg?`o=3&_1oz|#^_}8>U!+U(3j-BfGOcGJEE3RGVczJzqpwGrTEa((!LoZzITxN zG4><-*qx>m9AOm&r&?)IC_x0}v8q#MLjwSP{f@@z?T6ErVlk^JPFr*~ zcFVHkFqbvdXXj?2=Eox~`&rr3MXb4QvjJ}PfzQ%iL*UL46wgXZ__eGt<$fNiNV3##DK&!p0`?1E@ zA$GO*VKSzNaH$91JGwBjQ;D7)BW?=<)?Pnv1x#D@89qpX`O zDr4&yOX-iz^Xo}{HD#Zm+DVilaog>mG=L!E)#shkWYu%83NYn^`XbTabFh1v(lM1) zxF^OPUe)O93UmF=>6hirOn3ug`@?CDbznc{se`_vxrJ$(Mhg>Ev_q;^jLKy4DV$a+ zC8aXUx#J14t=i+Dy2%GUt&WXpoM?ZGxgE5@oW3|7Gn%R9qLIo@C-U=oGOuEL9Ye621mx{Q`o=1v_;>l+TlR{pO5hsBfZ7T;i zZ;6-@36o*luWW3}#8*oRvXX9VK0b>d?$OdhN=R|=W<`wX?ywi6;(c;4Ug;y?ddBa& zM7g!iiq^=2XlFNENdeLuc|SF>78yZBlZ;vt2hkG86B}P|SPeh7?=1@Ea;8`NZJQ=n zEU@M&yQS`_*5kd898Fsfq;JpGd(a;CFfKJPDr=lYQ$;)&MqKOJtYyRLbTNmhZ#(;) zFf4h)?6=Z}Nm~rYIRPwRfk%XirCk@Xw^ea!t=ktEQ#=Km`EG4F_NjRuU_%6UCCx6l zr3{>;AuTRI!i5}{oRvB1t}=W(ESpj4WLCQ~MEtxIoGH@i+w9?aQ@M+h6^Io%{SIr3 zL>i?L8ad2S=2kQ54ki_Z>9N9vj^V#>P@OETed(^Ocv>Zw{{R%GitE2J<*GY2!00@}Scb`0E>95@_Z}pf3IyyR(dd7k@ zdJ}Ew$ozWuWNE^u_$GBO0{4`y9kkSqvXku}YDAg(0_iH{ScdEB^AQV-V2x7t02vB{ z<9QTH*nL~eh@EHdD1(hXZ*6lC70h>#o@ek^_;)_%ovZJET+8x5u0{HB2>ylC@7rvJ z|C47KoINh?{C}8<|5p(4GkHHCrDvnW^rBv7h@*;-xtCD-?#feD64*Y{IRdjd$Em{ zM8k(?XH7HC;kJ#R<=8_#Nspkpq(1!j=9aFw?EEsqp#ViCWwpjv<*h&4M$s6CS;$E% zD`RaRW4rafh2Ci0IWIEFCTLOaOTF@BjLTNQl!gAp@YYys`~#He&rHkAm(TfQ0Za{- z-@6DeFN8I|0*MjwLUKUj3Zr>e_1E&G`bZi8<|sdFU-MO_?NsF`;teuM=_*d-^baCj zLY*@sSAihNTY}YeRy1+R>CxJG=c-Y&6&2Sy<~NT?W6$uBrppA%jas)Py1o*g`v-XE z!%Wy-t+m@nGp!ZEf4Yy|T`EleN4rAZ>PT)Mk3y&!y-goZt<+4lQFBlSFXD7oF%GB^ zLV}#Q?b;_0y4!Eh7^=X&ed8=qHo30?d@>xOF2*Ss8Hd|8#l7yc#t+}AKKDJ~u9i;n zM_igYCywF<0%!&@*AnD_&eN7=3U~Uoacht;Ql7t`eVYzD{`J} zQe3)=jhpU0=^O6FwAtAzq@sgc?+M>l#4(mely9&`hXft+WfAMtnEJOlyxEcoA(c+F z3*i}s$d%fiGW>Yyj|lrSm09vQzv2FFzp9GYo=%vzX1&q!=Poj=S?{Zyct9Hi)}3Z)n@vzP0c z{=k@}{Qe`+qWY|MMO&t^=FlMi39}F1eH57Kvx>RWFy43hS!5UtvI3v9wq-D_X(tVH z*!034VrtAVZ4ZVoB15H?d2E*tw3|yV=Itif-Gvx%v`5!p&o*E<$yndJNgV!Q@0sD* zGjvyO(30PigCghh#VI$0&Zuq%9T@po?UEkkUZcr>HP$MK?P~2?S>2sqOONK}&^)0m zY_Zf=N5EX+=vj9V;LneNuk;M+V^naps7t<+nyZd={Zsfvmb>}@*~)eN7Rhu75ocYo87eP4y7Ar!lFJdwE3ka z+E9~(Kp&Owl2mn#h#*I9fwRze{vcXM8x-zAGB;OAtplLF482)PKRHzd)dat8(p2{n zdg&e0fA}uj&Ct|g@&j=Kx4+0AzNJw1(ud5bmYxz0F?~8bkd8QF$+e|WBh^A4W^C%i z>OI5xBY6d#6ZY#Jj&ID_XSdWaP%!N#C zzg$aIy>6YH$Dm1|^$%raXg`s9r-^@yNJD#M>V!dmi!zJNhz<{6CtE3eTBe&T&}%tQvJORUNM$549-+r*_d)US)ppo>NQjkK6Q-dyuyW0Y?4*igLRM*^YTxQt(V!?~fx`!dmr8p@ap_(;KT!1Q|^2XD@59JxYXXLyCoGKMbAq z{A}j0fe2UXcP6FwjLt0Znx$#!g!F5jVix1=eYHQzWl8=*r=0CNci0zy(dFHcX56Hz zsz^=;0KEnVYd|IoLkj1KUTf-JsJsvDNX_*!w?s3T{ z!J_}%PCfqc`hFw&p!cUJawOn+1qQ7;cr~H$RnQ#$NgFMj?dM7f&;qgFk(4$IcP8xmt`3ZFBRgNjhmhvP;?hOfbnalLMGpaf4+=1 zFWdCY!Jjnyq1ZJF^Zo2|{|Xk8OhdWWUyj;kC=#1sBrwQbGcd+k2zzmFwLOEbFaEtr zi`CuYGV?n{7LePZqTu@E6k^=gz}&ok$}oXI z+xmtaPI*)KC@%AzdN#+ScKM*qQLs6Jt3s}Y6woujvHiC^Z|c??tTPUfqbv9}+r+Uz;YsrT8ImnQJbX6`Y`mun2|>; zB}rsCTd~|~%!iWodeKm({FB%wRDiXaQM4y`_dYiu@_?MDCf_eO0`Haijb@1TPcQ0J zrtJmZ3Qvg9Njx+pLN~JU}3Rsl?WE(nxJ`cc0 z?I|Q0A+Zw^r@f8u-iJS9j65r%=OFpXb1V|{6q z$Dwu%_JC#S`t1U8933ECLGN|@UzLRvI~78D;d$qO06UAs@Ky^;!{14s6AUM!G>YFG zs1FSW-uo_eZ@CTH>8@IT`xvJB`s-{K`O+*k2(KU3u^ID&? zn!oqYu zy|wO)j2yIq#L|ydnQWc)LECjw>5US>31oSL5K+9=>#p{UEg*@29xxA)w-W?WlZ~Xe zgXDA2Q{3W07gJcw)kH9AX%BwrB_;iS;6Q+=EY#Ouy$&B*ED=jBS%ENwERh|VJ8C)R zm58;D>Em+OyrEoz75!>IW3EOQ*H2r)I@Vx(xp%CsCYM7zo&DaLF*|LE zKS#VVVW|GS*>(HBRqE`@DU7T(6BA;drYO zU$h&gzLFL;7XWetKb8JLwc$Z?1@zUTcGy2k+#Ds8;bki;=7)Sh-KbA});4;p?vx zl5lBz1<8*;z0(txp@A7^+t>n~*?sQ_f54MH1x3ckUL>KSbZMPkfWra;g?VX~;*;-H z%Hi~1-t3W>)`u?>5EQ*Kzx_Zykl#6AfF}G zqVpvLZI4sS(QBlkMv-W(1)eiiiD|#Jta-+EU}V2ye6qFS zMKAP?e#LevJuz)@yPZ{(pC`G0_Stef<>MDWXK8fS6hA>pzMv#?(im80a{6>`LqfM3 zr#Ng{-!I~LEH>*;K6s)2j@va&Z`@kw(H16{AiA8wu)avSV6iaTtqU-&=)X63OgpiTa^-W zkUubEBC{Pl2f$i+%8~G^7s)$Y#@Zy)Yo)xFUa1~Msfqsp1Gm4da`;AU>eCX^A{h$U z`i6vfIezE;L{d1V`mbanJk7fN+2Zybnk}2WpU2ERfO8D^JCi`QlZ6fw2|Ixtag5Yv zbp56Sa8t%U%D!H?eQP4HSib~(&MVW6Z7feKukxLM?-gz22`UUqDrRBeLBBgOFxwhF z)Ov<~xlyc8R-@E7CmSz3B-AeP{r6CAgL{-Nn*k5&K!;po_GmijWSyjQky5d5e3l1G zA0jo|J$~yNiy!UOo3L#L);Wy_kM>EZ%-qu%G~GoxAU)8aAIk^grZCJMbIP|KDn8Vj z{p|Mx91@=XnVygX26HKzw3yf|i0`p3rcXxOdT=Mf#ZJB$Y{iwSrRGC;*qK{r22Rg+ z=uaDlsf~<0rF`Uch`6yrGo!34btV&g($)D@ zDalt(c;S3l!HDoE{Pbm$uZB!gD#6z>T8W9OTZZ{*JP2eAw;ue*h1Q8nm|M?3ToVPE zGexPRx@=g&ptD-9SowvL(4S+dI~Hj#RLhniTo7ZHm9iv#?-Wclz8rd?50;|2fuYy2 zSD{IACnS;=fow@%f$uqVU_2x3Lq9QW* z_wm5rQ_|&;=6A*48ATh*XO;o8U%oxGzBN}?x){7a<^25*kY&y5>2m(=DnGKi+xzS( zd^w5^#$h-M<@g^)7MWtT$C@K4a5amA>DchooTNl)>xbl|6>XOJLE}B_ky()3r3OZD zty6RsVU90ZcBXwH)U;DTZ!;)12RhN*YF*_}HR(&Cg2~r9Tl1}TO=2%nF=* zl4tDnb9jzW;)Z=@fZHRLRyx}~)@9$NY-embgT%LX;-%@`E^Vae7s{{Of^PNMV&l06V zowca=nHg9zsaS^mP_@_d1$NSPq?en+JoY@E++Q33{jY({6cD3v@~b)gc>zR#<3%jo(kT!ogK?zR_r8HA~+OTadY#BeONvb$?8VnL$GDNwjPDe z#|`Jh&_ye)J+QW4K+q(1qo4x&COQSk0z_<2^nd_TzD%3Z$ckIcOKiE}izWTfIrn&< zflhO7u~E@ZTFsOsf=KCKLlO2YP84;Z40C~N%>~eDXbaz_!U%>U*NKtU-QCb$DO)!3 zRun{idQ*Kh{?m<$Qj0us$BhF6WybP-&wO*=NTw1}P_J06c!eV(PBiB84F&6cj74?)%IUr02 zYiCyYG}J>QyaUPhVCKwWcE0TYW|#>{4y2$hNW#1Up5Eawn~**-oIc)%m~E`?od|E2 z*f%ts|3pIAzo^}FjqS4$k6RxZ*GDO%_t#pVykl2QHPIRJY)!3wko_DaU8c8c&C@@{ zr*EPIfvVxwOVE8zbn)S=pB{3|$wZXeqM(9e+kH@Ogrl~NVGpOe3d%gbV1-!%qcePonUVPV_nInwjI>>t2X?H}OP{&Ms>&99ZSS0u(h z=j#zZ4+~U4V!3r3-TwfoB7m#_c<9d%Hg8lR%4T(d{QC?Y-irS3Dqw$ zb+qE2$TCae*b=qWhwD9DEF9dpukq02w>LvJ2uGY#iqyvV!uLjD1IOP0f~jsx@)D8F zys1Rtq-^@Dxxlqn9BgwTX~XDt|Hhh`LJBbUa{YgbS;iMg(k(D~|E;f7rf8Hs|Yqm^AF?>esyeMBi|acQprVo~3rcg*CIV zf>i5OX#g~#?}KrMYX0-d)Bj(IAad&!*VMb8Ja2|1#PRA#X;Be z9D`ZEdp2)p+j1@AvjQ>83rqk8{#u)@X<2hAy-VUv<0H^HwO!+47EJZLbyog&Ij%f(!4Ie zly)0qX==W6Jgv1e2B&9hpTx9ho84Y~ul*T6Ij*55W1Q)rDJIGRqg5eUWQdzOY)ekD zSKdkgxo7sI1bsboraz_?pZ*N(!8_lr8z5|wz8%A1h;9in`Pduq-Gg77_~t*cn~b1k z;L&LMU@S_uL*bCfUl+-o^A;4ngzYjGf09FJDx$(56{`D!s-Nn6bKUh{SjLiW!f$>G zKLl4En#w;wO@1ZM|Di^||C<`c{@>K-Kk?%!Q=B^@{2u^!ARZFkmHeQiF>w@LG+FTY zZHBysf)(MQ^J*jHhiLRQrVvemP~CkrG`{q^qV-0Z^zoYu;P3M9_VIAohX$A z@E`BFc`>Uo_sWG)HJ{J9u9%6AlauuOoq()1?Y72ST~ z3HB8JTX6fY82Eo3jPtJ{#~c~ycQ4Yk$h5IwJ-@-GpR$KVEkL+&`;WC{k}2D?Qr5L} zUo@CRa9GJXgp!GC)r`hlAtX%Bz1P1n#26!G>|tBK`B&CIJh93->WRjQ(w zTxF{8Os4yR1bG0diYn*lSNe9V<4Rd2<6do@q}aOiAKvVLg%DM<+X4zNUV$eD=c{t) z*B5?if;96^$@6(%6CSyhj0ozNR5aVdZNq4|*zF|+-8LkO72Itj(qD~+cqFOoB@69& zXbToj1Y$!ZV4o-35wRYc^uAEC3LmqA8#C37{3VMY3mf>Uh6;kSm;?DQbli&lJD!rr z_ALJZA{^FQW~-fQ8f8$af%sg9)ncN7dUz9$Q35nog#^f|+kAq1a#|JnL7{q+9iPEl0v z*-6e|U3E1!omF^2YM?WB2TL+6L^JStz@7?`-X$fSfupL(eaHF&^Peie4|;8t!-1d9 z%*wg>m_;h2qG;$Z3(NTqXxgCBA%ZrxCcc5*+DysE?0dqg6_fKNX{fm?m$4~ER!k@7 z(9XO+NVHnqnN2LRUMN+v|hT7;kmx9mn&mkU;EG#S~xH=A(&vA zGEp*yBTvEdauKE?Y1NP5Yg=%uK{QBO(d9Heqif@RV)Ws0LS-W>TleBp2F(TN)m>hf zrL+Fec%mttBgf>dR@nm5+c+rUPyWU(d|5oRJimW{N!J(;9JjKu>^E(bY@S;TxzpP8 z*b2S5*qdTWF9yfg4A`X6&TEBA-koDaiInVK(r~!(aDWZeb+#40C>6{0@^D-PoWj}P z-h5)z49R$}=X}r%$m^43@zKzIe%_Diy$2$=uw|bO_1A4+X7G6#pd8qpjsQAxF^PnRfa$WB$;K#LN0bRq4Fb`zwQ zUAy<1vmsV-cwtn=2JL5{;PhR_CZnWmE@V~X!?bH0k8e-QB1Jw2z#+AK@|`6i%@2Wd zNbp2LLCFbU(u+3IZTV>%>U)IaZSk1x?jF>W;i626Z^hgpiOe++Nnb-Wt7!RL_B-L& z6JNTT(94i8V(ChDq;7XFtB2kGVp{6ejsU?MKGc+nxI*UNpJR-7sAnXqZZaR3ldRE= z2ShN={no-Jdc#oS`@_#siSiwDO-;C?+}-?anlaQPrXxwdG10%^?9&vt79`*h9J86p zEv_|r2B;I5EkIDNi5|lx&*|NgDNDTl>{akzK41)$@u{Sl!S)l5d02-Q(UY39!!YVY zdZcA7<_#2yh31fmLpXIFUuEzMQYftr(1 zl33S${9e3H*;ViU0eqHqPv`wfx_mW?{pb6~{7W{h)y|4*UOjt{`4kw74RP#o2QH}Y zQmWA-Fd84_EbuPUT7E0+%TSo?6?Kc;0$~f)KBUQi7D%E$BpT0Fu)mn7bpruOx zfYT8wDnji#GSP9=anIro8d6^DeVEI=LK9#Ii+cZHH%KV<8riqLLSG79MW68E08?X@a})T@$uQH zPb!3PYOJ0s;gE4CNz{x$mfBGi7Jd}Zt<^JI2AX0NK-z)`>h+uR@V+_Gb%po$4$?$_ zs0d5x-F|DC3*UMjyKN-`cD=xT5lPp3`1dfpYeX6BkUjUV;ySvWk=4<~3R`dKF{F_h zai)Da--$ui{9>gQg^7{nl0SX+V=b}lT`5~?oF2sfRkDV;+wXXE zC7)-+eOQ>>EN0(^ZIefNHl{||vH*kpEwQzxt*>ML0X7kqIW_9r`dT^TX#%ZA#6=IN z<|EN$YIOedOg-KTyfuGt?B2EaIZb#mxQIzMkVzOrm--?zmLq0mi&afYokSy@75ezx zt)={kJkUhBX!srd8A-_w_@{*wCd4_+_ZkLXTE%!-qV$`fMeH#t8CY^8IcQ_CR3t_y83}+QM&eN;W@;KIA0BI{Rp?G~{iLX{B4Baq3){N%UDeM8aP5x(L79@VN9@jKu5$ zcWBJ)6T;Xt0I;8v5@rokTSAf&m1tx37U{LT$(yWxth*FZI|{Q1tCK$%i2brjxjv?B z|9m2rfb;Tzh(M3{lm0|Bnfg8(x_k25v@yK(W*VG$!^65!k=cz5*w=kVhSz}-tpUj- zuOB79<(yHFRsep*f9%qdFsMz8(ds8qwO$rUX-idyV9Wbkb$?xZ&c3)tJG+*ypGH0_ zi>7?U>=?ea^5u6}$!i|VqTe$#sxbD&fXGH_%S$5V@n!-lr5}um}m&NhTMHv4`Qq5095$l>UNm zrw*Yp-UQg~24O6Hwn!5zN#X?Ffpfk?g$haaJfZ?Sxff^8EoE>f-zMf~8G-fisM%|SIIJZ#Ct(|V1^#EoJnsp zpck~7nhax#B;P;>7f+=?g)DSds(PA2&rNW71Y|K;6_ZqH;BdIeF`jjI@*bgubsYm; zS?esGg3AQw6hwz={Hu82s%9_Ev)8Wd2*({DBABffwI*^Q{%r6G)D5cslb`v&Q2oDv zUe9sg&;50cctRigoX83^;aUy-4wK!*Zn{9OrOEoQ$ui6U(zdtv5Kew&0qb6AWC-T= zs8~`TT6VXBPIY$-)~}VTLh0B!w6@8$vJu$+r!XFO7jDnyN`s|LSnqlYNhS*g^EYQy zwbKT(H{SFC#tKM=I^+@wuO4?_%l~ESCc}WqK2i2v-&t}C(!i^`pXMAfWO)F8RPhs% z6%r+ex%XK*Xja8yY`u=ofbDq0&O)Sr4@b_{ph*g`OytWnetk+aA}~x3`z?sKBAl*0 zBa+b5TG4uRs>ta`qGC)lAu|3=OTA9;DVw>mYu7Ga?Dwo8 z#DZ1HcrzCJ#Y?qgpM0%)?5t-9OnVQ5-Z7~EZ0)qKlgW?*?JJ`)){ZX}mFg)rU_{CF zWH6U=m8U^(0%GYkBuZQ&qhf}>a?5~UrYu44`(YGjt~&9bde% z1v5dYCh{J0hz=c|K6x@-jPyv&p zfK~YHa1Zy-{(%i%b8Z{O;a>fkRZ;uU#@TBCRs)$tE@1;ZWKpz8;8i&KY>pdeE~`W5 zsFoADZz;@Yi6qgF-~ZQt%TKX{akyQ~kJ@96ZY|`fFhZc;QL@!w`ymL^rE$3i zwSe-U-jO)2(D+PhEcFi{qmmIE*t=*kPb0F~ZaCyqY4c<`Xyfy$sz& zrtdi<4O~>c!$lr}QO<%*de;%wS1XXa8S6ztAYe^xcX-M z>Tq+}+y9z!my}clY#fy<5G0{mYJzw%>WCft(%q_xv3oV0T&wkn`gj3lUn=ULbog#M z>{>3T%HZZ(rpihhSC2u%B7I)@SerWB(BPR!GT$5yo_%+ATp-m87>w{rxwWI3^Y*Un zwY!ChS!)ErsASmr8y@5piRCNII1g46erS#RpIZIGL@&H35in_F4E?|?uJfx z)ZG@ZqNu-h?Fpd;o1;)G>xk&FMl1`PzSc8V_Ik)h=9^%0$f$-Us}oEFhJNg3!peNR zMP=ArV5b|TaAMl!T91N&*#k?qmzHcaI7-twW-c8Ap|tbJVNxz1lswZ*pngx|O|uP{ z!OzK~IG5oU$YPSko@LXI43P<*DK|077iBb! ziY)<<@o6g}=%g`~xzt|q3W0L+B(?ohNUCD1#H0iLUBQ28kHI15b35d^F3x}YJcM%o z0aBg{EFD;U0v)%48Rj<(`M8eYPU!l7@lPw*7u<-TK6AL5(G5|ccR%$&klREGe05q7 z&-%Q5Gsy-{*-yrf&Qp@FUdQCOaTO^qOC|7HI8G`?Umnig_8p~N z;D8@ol~a@kGx9!R&bmkRiKK$g$3rw4^Y9*&yrDI+UeP?~W9Z_tX{z1cWUbDXn(EPt zi^Xz_iBfG}MuILGD{SF1is3p3glA)dS; zdiQ}TZf_%&lP3(K&T#FJNVuZB{jg|Y)xdCEBukx*MwA+7xa{Rn2noPoE(IUxR{T*TRRb$N3Nx2h!6`Ry)8B_Jzjng(P1E<+oeyGj7PW14%;T>aSPB1tNi zxGdu!BfueroDs=DPT)*%`vpJVVp)@pHP7ArrhB%rhHbN7j9jt!{&0YWm7EkkEHqGc)gpRYQ*<@#|qO!9~oNeXeqoH(j>uKk8%?ck%;9+7>X;TRL||x ze7%nH*NpDol259SHcMfZr4#-<*gKDo#!S?~pTml(5M(%NKFqHE`wN9?g~(QIOUS>d zhD=g~Pr2&sTR&7DtzLGVcHAhXlYa}Lvl4D~5-hAIH%X=46q(|=|GFmE zE|Ke{G>P#uDY!OG>sx zyMr0(DM9Se3)>j$&gAib02B+7qb)bHw58`<04ae zQ0&b1gy^){xBPSscUYvcy3gh*sR1*vHYX*xly@v?{Y)NP*mpcKd2Op%eYA6I;oSCp z(JHuSt-E_UB~2@qFe|PS8drKSa~%7DCOXxO^1H;ik1Dnul2fz^Z-~yw=UmWb+P{F8{#B19h&5J z@7#}5H1%sJC<0ULvQb@)>h=%id8lAAepZ&d)i-gwKe@VTJNN-N6u)ptB_WTxVYSRI z5pVF-+3(NGkt&~bn4YBLip%7&4mltqB`v^VbH2-VF!2K+NeL1dr5hv<6KYGNfw7dI zV3pkC?dKpB_!(RnEM!z1Mj@Fh0vbZ4Q^zOL;Z%C|XWvq4UaY+1m}nzwJ|7?Wn09LA zepouQ2(qY?_~I0@v2I4AoF)C{@AHryei9V<5*ol{fR1q=8NqJLNhY)l;z?6$teeC~ zGdzFL=g^$Da- z9s`|}@_fywTS%4pd^^@&$p__nq*#{AmU{gM9+?aqJts9Nk`ba-XRRDQeHm=Kx9`SM zrH40`RQR@c&1sG2Ls9HxY5`1(@@t%lA4f9YA(mKG_^Hxtaz;>H4d8y_uzp7?R%?mg znVWoZmT=;z;f4%{%?%T3z94kc#mxo71V8TB&GBJTd80SxQ#f;v${zZwv9KzM&O6ty zlz;BLjR_hv6`0U}NP~GwZ0ilM(B;>eS-;MHmw)uwK&m{fB{dN%$x(X$yvP0P(n^OL z*cqb&f(Hz}P;<|fi!%C1{mz21vi!%R-g3~*aEL|K%YT5Un!%C$N}4yp{BNCK-NrM@ zf)D9=irEgo{hgP=%IP^b@Se1M6#Aoke|D?)m*Jz`(_H2`WAS;9^wA8vR+LMqGpy}s zIH62MwZUEXrtPVEV=;%otLmu>;~!u#zfua^pl7(!at~nMlPl44Vttkh;;O-W5!Zzl zXCTN`aj%hAT^^jv-R#JX@`);ir9q+7!EA55`~!sDul@n3Y{b&*sB-Z~^m5HRV-bL0 zA`tCyr4xlv6<@abV=w>ol4F?2WzZ^d_Af@Meh*Ta&23UtwB{%_(prR`F86((4Xe7& z|1<)en4rW2Z8SWB4AzGDKiDE<5;l!UGUbW5?=L7Wk{~Q=xurN~H#z+RlM`a0;W^hh zuSL(WF8jC{9duGMtKVfJQf(2eEXU=sgayY_pM}CCj!b1c(+X0eS9gbpiCY(Sw$=2L zt#KMi&Ww%OOe{C6Uz({mU~&siP?@Nb;ZO(sbmdn*`Xf@uh<|4=oc^6r1`i|%e z+;*sV;kRr^8$3@^Pnf>*qzKx7c<`DU-*@z-hT3y43olDaM}~?5iKTp&=gmOK z+7ABo!-ymWih}>y3!?FuA9Zdu8!?`DJA~0r=Np1;w=90cRu_9(%UPMM9Mc)oI` z1hI0Dg|TJkw#HcqSRP211eC>PbolYd5w3qz2BV6Oj~6{Zg>TynH_gs4#;3B=SVi?P z31p**&)8i1ldM*WoHG?!?$JCAmN#}qPi40Dxu^e1Hz!=yjlG6fYMs^sR+t@bkANLx z33=Mpp$+6YQE{DslbB(+^BahlDVk) z#**QP@a9iIq)PCfX-2h29S0V2+RU)%;0*wAd~+7;_o}wF<*DOKpzi*=Iufg&YKXhq z`56+8J4u+Bus;X)T$llt_G8{vKZ!JyVq@`ua6InPK158s_1F8V^0V~7^y#>d2LNlC1jBhv1+I(H<2&H#K&a!p+ zv}MyaN^SG96(_ELfJYX8P!6NJ(-U5mDBk?X0)Xp`gcy(5GU8uBE z)Vd9kj10|Oe~QSGX1WcdYSx&xI7|>WR#$NAP49_icbH7b<_KAf0|*w1U!fWw6+YWp zL7NXO)w@?u(1n2eUuwy%Iu671jJ*)yY~=8gu!2}zN_G&{%1Z4B@y+m(W6>cd9)I=3 zdD**MZ-X~J{yluN&a)*wtAaSVV^C>T{j=h43w+)QoXx?87l@S(+a|6J7f*b(CR1Ij z5BseJG?pO12Knr+ougB8vfqz-T^(s+!pZkLDJOk&{@Ro)R$vBTv0`k$Go%c;UbVI2 z7|UEwe9^{-CplgUL!DpP~IycDM4;t zE0K)dF?MoP5+sqvuG6ZY#3KvblN^4j^+V$k-E3c;_!taUOA+x}j+I-gv&)7t4K!iF zlhrc3Huy@oxXu}fdHm^@t#EYZUaNhQ15~b}yI38`LnIvL^lkE3+1 zcfh+ySw%I2l!0I?UApzoImg2hJ1dVQ&Bln1?h1&C@;$1|Frn6b5Xn^pQzhb}*~R9* zOW^I<$bPPKAUd;uO&}p>_P%)A{Wv4BG>v9wY(p=Ys?O!5jDc-5R?Vn+`>13bsa7fW zC0*H$#_NjU%Qvjuo2=6WBMsvj0g$#SE373{^P(~m>TvSxSY%aNSWI{atIGUxGIFfg!U!3LG_ARpgwI{?3 zTVQOWB22px*z@*IiK(S6;5&8JX~@J!|HoH~Zv%8Lx);d@JjhqV=M%ybvTp;v9FSQV zwbpTk&*7ct#~-Uv4N-TRci(0vWv~E|(m^Ub;kZ!}QL{E#adIzpNDa|PasR6|im}fi zvtsa*lZ!eChe|C{Yy7){GwSaBTiYcCYpt~p-Bsvgqef~Y32Jds01WUZVG-8jaqC)k zAWIWjo;?a8CGj^+TeT;hO?ANEZr-M1X7byIAX%= z?$CdowtlyK{vhS2IUSWkj@I&?ye#MoI$^{+iz5D>^$wFb{YWXvj~1Rjuiib^BM3aM z!~?#_oyEyzQ1Q!Y#N{{GM!8CrE~a_}DU!fkhy+qz6g^Ugl?arqaXT207a#d(yvnuAuFesiK{Xr@_DAwy1^nQsW*4z=+{C{-{8(@i4%+Y6 zt7`_J5rUXdLi{oWp^Q`Zz#5y%1JkOgom&TD+=X=Zmu|A?W#pQ%L#4cLmg3E7j29RP zzoowM{DofM2V1%E3f3?30!yGZm*m`VZ+B(;iuYAGJBOYVjvnXK+$RR$z6AZmD%r2CA#Ur%&mO+vhxzHVQcf6! z%S$Uu=EgvzjfM+#2+6QcA@$fB7oFb@+Sbs@vXVvQ*q2!d)IFifELieS{WrE&R3;2w zz+La$ocJN6@I2~|T9TtcGAYY$HsqddUYL`r{R`dV_u5|=mcX5eER)**8ph%^PGBBtprwZhnLMXGGNjiqAq zSPQphz+Bm^P$WDHSCyCJ8)i`X@0rK5nrGCPaH(x)Q&lXynngLagJ@ebub@?iat9Oj zuY_6_kZQF#9FUfSt)olDLD8>I%wJj4SJUczM!_B|by|yfe=yrS9`D>JAzEei;{b9pBHv&7mMC|}v0vj~cJRW76X8}H(wXrBrV7~XgxY^+G zpGv(Pny3z#{YnTvEZW)|?+hoK2xW&VFSe%BWO%6W)BU9&$)c#8kX2UB`Kq){W)&PR zd_{x5)p{)d*x%(FqY3zEc5yk}YNMFkNv3sE!1i*g+T>?m)&8lAg$pUdSvh(r!-n08 zRbMQV3npuf%0C2c2#{l#s}8I(@+^DG$}>tf)%O|ydfN@noKo+CL&Cfg^xqPqb1DOP z0dJ)+ovXQVxpCn#cLiQpG2VRDjVRH)B=)#hjH2gUp$8dW>C_0arHG1&t&uQCJ6Y}Z z(ws~ z+^I1*%8SK@Np@;k7jbSh)G!QIVasv{qcdR!(-;SDC+;<$Rh8 zs&t{DxoDq%XN5&}&=;r(f>vp$A`_|$hxmwRi*t8XVE~DmiRp1fbooT`R#_7F7}e(* zc-{=wfK|9yIj=t!fBW;s2%^>b6`?s4IHF`R$@U!7`Q=Xm9`sSY;h^ zdonx`=unqVOaY}nDIUL}YI7CmC>K%kx7?+fU05H1&nA1a9^OQkC&B$QTw(|IWTuQn zXk94{QKp2O&_PanD+r74K&5D1p`cXp4^AY2(RiCj0 zsw4@)-%I|kml19E!AY-uJRb1Eq;8z?OI|r22A-e;$3|L&CR0UQi4loG%yU^i)G?Js zokw%9dV4U3YV42VQ{@D?dCYl*5+9jUGH5ADiD}|M_FVTT9670B@01L4fUedI+h#32 zX-^70+dZf9Lq&BPV&87)4$cO7c9@(ttR?9?i{k1aNbErH>tqrSdP+vKcNLNA_uK(Tw@DV*&TI$?8!b(0 zsxKahM3&qI#CTaX)uL{bGtwt|R0P*FkD6UFb_MKbVWo$AM5ztWsJLt0xhKcziku#e zD&hKmTdVLZ;u>*(4Al)@3^7BmJ`)51WhZAA<|8U*+whV`L%X8BWhZ36lQ9Eq`E}u2 zvILekZ=F!+10tGYHv|3y6uRi=bH;5-{xSoDWm1iDCOmQ|ydG8|_y;#WE1A3T^62b5 z&tKWxUl>e1owR3B#ncOoYd#vMjYamc)ACy)lXJqWH)1JUW-3JBEQRWws;)^#l%~J4dXjwP9xfG&4{mVFq~Qhe5TWb#`-S(Bd>qrW z$?+Rj=@mdXBM-f<>toNh4hjP!@wMuy=GM9tq+{jOdB?LKk9TNr7DO!OvMozrkDD`8Iz<3$d?ai73Y_A$RqN~`#daq0{I zBD0uQNgiJ@i6JVQ#!Ox|YMZh~4KwMbxfVOZ%ultSaVugA}4$}IU7v^JXX;FOG z&Vw6E}AQ=Rlu6g0A~ay|6<69u}9 zghQNH0BI#r{&&yJvqRcIG7#dli32KejEbtQ`(yq80Cfi`=KW4Nt0HNCL==8LD73_{ z#AguyV;}AOqxR^3X9A6Q$k+`&wHA{YPIhwKEd_fHQ$qM4*OH-cO~Wl#?h89k*S8#R zqM!?AP_Hx}UKU9wf0HCjf@6EX3O@aBn4_eAt)}9Y|m|GHb-($ZbwXX5GXEKp^h^ z$2-cLW?3lXP0))WtK5}+IsCf+^sgnmBug3^vPAP`7+-Qv6W&sO+J66RU*L}{a8$R!RdB!k8F=U_m9GC&nJV!tf8@w^;`QEfi~Y8>c1^2aG~lvKL=fxj9prq zl(`A)f?yAMemw_Kf9B?5va~TR4>YvU4&-KZtm7!DD{JtZBeQzL*CP78W-G7QQq1M4 z6IF8W-(*Pi&f)iKC1N;<=6tvhr`uLEZ-q=8S1h$CB$$hU0LP}-mlClxzY7~}%L|GZ z!0;?S%=xx_kc*CHg$?n2QZW*i_-Fc;b#v)8tMu(qgTg9m9=fQ(!W*17oe@Klv7K?a zt8A8QDy))uD&ls+nsfKzaM>{Y_YRfp#|Lle<1$5AwYKvO)=^XK+i z`2=v-nfJpKAle_lO*8rt=(LuX;$Lw&9q@z;_xK7=uUxnjvp-UXXF@pj&+%gmZ+6>6 z=H_6Kjw0*%P~Ruzw?uX--fPj;tcUxeY)63Q-~!!hwFR9opnKQm8YAf2QMIv!IYIaS ze5d*$+z&0Dy+PHL%7vQ2FNH9!6;eb>lgPJB7S?@jTQv3O40Z$v0b26CZMm44U-~Tn z0bo0$4U}#__@3~FEk_Up9_LzWT*nf|*AT~;i6Z0ZRMd)N(nHe)5w5Dv+tA8@KWvzw zgDndUO#Z*4DVmCUBw8&aSKSVOCt!wC*GrNo16D{TzGt^|V!Rly2~CPMO8#v}nOagb zX?v;nf)8_CDqE+%1|Y0f&nJ38Qlt@+uQF4g{m533n~xbxCvri#QX>FIyD#zJ2sY=Z zN@fJ%Y-=W>xS@K)+tEu(_=U9;Ub|r5{McoQ3|=$APQfN8u4k`W)dIs)8~?AAy#q=H zVrlG9mh_@bYc{H?{|0fEnZH0iDwr?q zf7AO`vLvBL%}VMxF>w90fG1_KVF(q6E`ioayoOK;W4_{Ht@&;{+zrtg>`-^&+XtCk z!i|Wf*6KWN88kCYtgwWBXlWhhiaZ-h*!zMTcWMeGE+joKEwZOrAB@ggcl_^(FkWnnkyC=*HC2orwn!YI;wvT^g{-J= z(m%=tSLt?FMpX;%6q|M5`e$44BW1FEht8TKyd+lpS*_gOOT087LZZzcxrq@xQQ812 zdICFiN^s{plrkD3jt{J2yWC%wrQw%<^+>B`(qzij7sCquGg+ewK#eq+0T&R)s!x5FngFvIwj8)ir%@$V^mW82k+wT9PPL?rx54*r!wiFP)Yy zK~YM8@oLmZ62m9XO!2_T%_FBat4cQ}6_)36DIfG6 zO@xE(LY2*)6jM-F_IvM3jLE9*-_chdA5^G)GNnmZqEdCnxv`Plm7Q6@r%>A%`cMr| zZEWSOfJospQP}9l)Z%IVe29}` z`8gYWtMh(Dn%C>@82hL$wndnS8-+wm@;N%Y=QzRyv&GFf2+J}p+z3LYI&rt%(qOwM zA9FP`bM?rRsLCFUR}Zd+Oywe1k_a9h1pTz|gpBsja;IUKh4wt#G_0i)&K&wCIb+k` zZ`FCMu=QAo3cIokr6RB4)|6wO*iyo^eWH_Ak~i>+0#RZ#qBGsT@5%2zo`(&XbqjAbW*^8}61T zDBr#W25~tRW3=VkOGP!JpZ*6}K6^*>2cuuV5BzC4EhCn25Mjpx9QNa5GQ{{kBz|Ns zzEPqV7O8z8e}D(3(o;11AZ69`V#59!d4ViDZmVjo&aB0@N2x}qe*+UaMxPVbOf``_ zWE|4TA}QZhGVSCbzld)nr7n7vaK7FPg2codKMNj}yxz)l`;2-folF=>S>JyCQp){< z0UJ4Q^4d;+gT?07zGxlKxj>-%HtS#>ciOfIS{e27k zAic($87i_~+tVL4rV&Zc%SW0+%h{a(n#AlBQnEP2o5!?bRiDJ<_tCHU`JIX9d`J}Z zsuQTlj=rj7*&Wj|`s13F(`KeBVLF_En%5*PsRj#;%^zAXL#yUfTTm2oejkb($5-}= zPc5M8$&)5$pnv82(Upmw zzEop%i&(T5YgV_%0f}K|hnyyIFu`^&gKYUK`L79|A??V{@JkRnI4c`biPyTuWDsw zxEvrkRgM0Y=Z@>F5tJ%jbMtEdtCsX_WxV~_*_L$$;k zd`)?OjbCcKtkUURd5zzU7+hA?eTQ@KZ87#zOTzb{*LrD6Ib7*W20QFW>=zs(w&D70 zmvkrGFS4{pt4B$}Ve5y&nId#;Yoz}H@++>#AcNaKD|+aE@ko-f0`x$Ga`HyC?hmz(z!uZ&=V593xFA8EeyP8jHb$i#d82b>a7Lg<;&oYKQDzBElTbqXU@ z?xb*IyE?pIqWM7sbn-bUn?$xzfIr*hdXh&(*-ZI@H{On6xjRT<*OXaonIS4yeToN$ zP6x*x42b9V0d3E05wcpRMtrutKNR1bM}-A#{MPWqbki!Oiv*47=+$?+U*$=dwRGJy z2+nuy;Xq#ep-B;T!C|J3M;mbQncExfmyp5g`8uq%KyM!H$tE0I4jqaeG=f~%INdPT zOf#Wid|a}~r$4cX_JaBnUS0eIqWtp?8gE{gIs9LPA0XHE`6v0V2Rk5(D6vnxdOug7 zgYvl(Es~gJo}wJ93th=7FRWFlbN$0R7=y6!lwan8ws$)pGV00D3;e{d3WKHtIJF~j zg(NR}w~D5X?F+E{=1c3yooSO>uZfl&o5YtKGbwV?8exYUvueWsDJKnj1NiR+aVu zcWS;|cCX~`awkL@WAe2-;;8=x@pSDw`(V6Z_|W|d$Sf$`+uXswMgFT8c)X-7TNwp1 zwi`}c=-v$K@60tCPo8(cO~(yr1GRC3!LJ`r>L~;U-kwX$n2k^$t>UcwJT>j3eEY^! zEKBNjU{OizhBy}T47A;*!MXg>7iyEbchOERI}iL!y@=O%`se7qI`Ye0XP1T(QnWOn znJI81{k??M?TWae;bLlZqF((Y1 zi|9ysEqqEV1zN5!a*#LI75&1Mo$1DNK;jcIU>{2HqL9M+wmNEB(Ax6 zZuY%Nvg@RLWO0&voR}Vq*sg|=@_Rv3(S1V2UQt$r@j4UXe}Cvc?B%om17yCkv~(cv z?Dh=sBYefs&=aue`kbJ(gCEF&IZ-MEJkvMme!OT~^BqIlsBB_K-AQQ^>{;I>TO$D< zT0}z^t+JG?N0Qdn(t}3(JR`=qi~8$fX@971Mq?(cK+90?C;{5`_H;n=piIyxiV#;E zW7>L4_uKbC=m;lwTiRvp37*Z*wiwOlOfOkWtrEL56Nf!fg|HV|8;48Qv^`JtqzTV{b%-C8jUhzMe$7wd7?OI7}3xL3bLMcNuSYXuhL>V$s716Q_*4qclSfDN?@ zx);N;3y{ms6bT9W?y^a;cZjH;*+hnD2^tto{4cnJf+mL1+QKiK;4CDZ!(ftTmJ22$ zlr_Js{W1_$=9fy$u`0QEANKKSqs`W#z)jzzCTsO)|JxPr21d*bflgJ5&{XVqbNh`F zIo%?=LzXQ61C?qJI|)4_Ywv+@cf$&HGC6yUw@nYO60^@tu*jmY5X)(SkgB$8 zWn^fWhG;#wQhfJ632R`jk4NpzAIk9+M_DXQ&t{UM6}_LX(9yfiT*s7r#xVv z5@-Ntsm(BGPKI>|KU22wG=m#^6>MxtO0p}DP$20mfxe~dnVi;voPZ~BX9W{4>W6>ejR@Bz(DXC z%`}eVJ3E`#5KwN;*K$1^BMqOL^6b4FBim1wpuXE*jyQS=%4hIU^~HVh^QfKR?lRp+ zKAkLFPI(%qQ?Y@_*9q+Qi^jOa)+E%eE?i{z83!-fl3NhmaoLP2ah@Qf^ww16=>2l9 zq@`+JTa}0FOT%2) zTb+B75NO6E|6@iz(bcH@PkBA*qW3kdr$F&y?45k=eS+JGVM{S4^Xz_35=05RZtgdnWS{Y=fdPQ1K8JQ)unng^LyE z_K5Oq$VN(d=(SEjcFV)8 zidJ@i&j^xZJCzGG*>a5G>IL|rJ}Uv2l}@=S-G)-xY!wcm_E(Y8$yik(!A<@s?!`Sm zny!gF_nc@9W>KYoEYxM$xj>1mwhodmx{n?0|K@`QQA!o{x?>kmH;tgwn8rjhbouto9&BHBt233z29wIqw zVXD#U6`Z=6&WIX5GCMS}r~9GNB2GWL5!(|Md;O~aZ8yqZkB_;kS*k=R!5Y#S@}+qr zbt5*kG^2WkmH`qfzGL2a8Kn4JC7X-F7#7oeeA4O^h=jk_wwIUN%+Rud(>!0v*oUa-mlU;~kRA0ztz*@h|;b5$ls7JZ5Sa(P~Pu*@{ zmFTWiPdr{D6H%8)7Kh!G&q$eTclbK@*)834eJjs>ilJerQ{;>h_EWVhJ(1jb%ZjRo z+o>k<6m)3d)o6+Yrg+r5`J&kanu0%M`TqXD&?)>gOgG#v%ch5_w#86*s` zRFA&Q?GZ}dR|=+~Y)c`;rb>uMM_8Hc15kr>&m5! z+)@4&LNiKcpAABVn&aX<<$Yf9lkj{l>RE?nu8qIc1FHE+$M{U4HrwTUC#qA9=UsX^ zzQv8vR*3cqXjUW6Cr=jw(@mGkJSwu6B@oyw>{I7yEv)&Bo{?B`3DAy$9YMni5wCoR}F1fwB?ckoYmZMKS z_Z>7z^t;{L5b#&;@T{&cAhWQ}#{PM=-z9Gy9xPoL9d=&VOcbgvIgdz+fXi7b!FAQ{ zBZqdp2u+_&Na|;cqCHHAcpp4dV67TwxnV%9w55|Vd^mQbJaxUlQ^Qwfzzgb5bj0gf&$@g$ZT8a@1e*|8_QDsW@sdEodm; zI?>)APn)%=x%{%XteY4HQn5xA8rt~ZzUQlotXDrUNnov2s!j?^u~QgTB|EMZ(EF43 z#YCtplKZ+~LbFTiA++qMvlcs4;~F{gd$b+UjD%-4i5!;kbb;EY>%n$xOjY(xZiAKe zFRs$NjBmb`cXV{FKdnu)bzj5RX#&Fi9<%~RHBSVo=SceoG^^}2piAV$E)&*YX$&_` zqJ0y@%Cc~4ZuiS|G)AVm#HN_wck;p(a~#)$TlJjhdE&1d?2d}_wZ}(XSVqG=dnL?L!Sk#sNX@6X z@%d~gu{=)ay{ak>Tlj<1or9U)tk75A>jRpc9n!W`s9`nsbF#O|bGq_^NlrC+a`&tH z8olPZV53EW&;jr+9j;!g3DAvYjH?HJR$o^GQdR$v;$C|3TVsJyNbD{w->yat!K}~s zL03K`XI_{(wrj;ox&dR}fDIHzlyxctdrP=}A0^K2@?r=Xeh$~M!<^pmS1gjgZce!N zrEnF}nH673t9&EiZz;=EJ%b-sI2oM}3=cq6-)(_zt`bbe)V>;TXhAja;_i$zo?A2` zYpbYp*bSH`@RNSq=LTh+XR3<$vH|Mx-X^MqNLM8h;lJVVyA>QH5mCY^ZWLv*~ z2N>0HR;@+&6(W9Rtu{@co&J%9=nN`5KsLds-9$6Fs3v0NtbV5|bvO+e>h5zQ?FfFr zQ}{{Vh|%d6=2xMc+r+hIx&icbU7i5f_QkZ8IhJQqayGUt!dZOqshJpcwHsd70js{$ ztTgkYN~)(GKkV zuSqg|Kx036L~6;lzf_sc7bGDetW!g6NZ+Ku@7kW79vBsl)qDI)%m4GjxJ74yEyWaI zBPB8oZF-#y|3DmPzoW?}omxzGI&O*&he96pry@qWLt7c}H7_KVdhaW!20hgx1*&=O zaoIRmKiacmRnE9kX*Nc8+l~}f%ef|spCAcZijk6^^)e~( zJ{_BOMl=6jm7KDTY>&zmK*&D*cGIT#7IdiGrdKtM&J9RRLNuon>6-RW_?7Qb$^d7L zR)pOhq8`xxJi!^K7YvEH6o`uvpNEqtM-6Br85&jRgoznSSrFus-srNLS8i?PGOwrmmECK0648hCB#5W6^xEF#=3HOSFo>XFDD)9=DIlraUe8qEICzQgl-7*rZ-$uZ(p~x>LsI?z+WqK>lJ} z#7AuHnpR-hYv+RU1g~#%(}IuNJM}>BYZ^HA_CcdVd4PGW#CCgl>7R#@n zz6F-v=NUfD2h5!xOu?fj_s zIURNUreraT&Oh4t{{Tvj2`h#@^jcLALg5^0`MH)7rV%4FzNj^0O^v9t)6Glkd;;pr zu(gl@47q3T^ke{z)7mP}NaI~2wqm1S!S?;NhBf1&?9z9q>s5R0793kLJ~_@8HUT%f zM$E=ut!$`>pv`XzUyl;VGf(~lh#Kfv&*iD_H>o-YMHiNj>a(6(2=!XY0l`0BJeTbX zIdS#)VpfIqrRyL3LwxsD;TRpwpn{u7MTeV3QzcMKiKgEZr>KP6nYAra$8%6Rtd3jQaon1D((;G`Sr)sS?<#) zZmvv_ha9K(bwl49-}7X;>0~bM$~6*`8(JbL@(S3R^g1_QGPH72->5lMJzsmQD52=+ z>Y4Hqlfmn2Lof$+^!!}p`xE@hykEcU@PWK565leu$G;t16#e1d&?o#^S2%IDJR#~i z@-JaOwk^tCkFF~h9aDv;-Py()NxCJ~-(PK85|!85s2nT*xi5KMLUAH%57`A$H7K{c zN{$GA>$B@}y5#?qWrW@%VX2}bNPpP+h51P^eaFy+Fd<8?i#jy3~|H%*624aP>%fhPY7^ixX&yJQxRE_&t#~p%Mn^aYc zFL=c9^%aS=+cDB{m2j#J)doFD0Bl_62YsuzOIyYGN^30ss>-O~R(t2kOJh53Ui@U? z$aqfRPYd?-0t7$D_G;mPUW>NN5syTq{Rg65zC>GeM?M6ZiJK{qiYrq&71p%o`dv=iq(wJT zE2^&i{LvVXe|TLx*VOVtUdS)C8@$UDvN?q`^2dsmu)%Cn73U!x{T=)@peaRLSCg#H zmn-xOM~-#B$0DxWjv94<1<)1;rzZZlA)xtJZ!Js?>w198-zD0Y2Ycw*v-g z0$**1k(9hAo*_hAmj-H8m*28zV2)y9ztSgVUC>2*%)9Tw=~ml*Iy|vf9x&Fg?wAaA zfkg>L9so-lT_ul*vI zaZH40RAi=f8L`&Lm0ZLH6$IdJ;A^RZ=p==hF9~Gw>!l6oCVT^0)dpKR`A`%rm)edp>!Zu* zjk3H-%ywmj@ZfXk4x(H0{Qhs6XlAOjj=t-JKr>zMF|ZN`qwVK398OKwnB`cZ`}yT*iXr*ybo{HFb<4-MF0}sE zMLM>8*J?WA*ZJN|dK*unsTnSz6;FN(Jwop^q=DXK)Ig7#XG*@ur79QZxE_*V49gt> z{lhNDv=yvvud=F|*Q>RrQlHN>--lCr2jK*{Uk@F->51S;;AyKFjY>0q4Mdcfzg+2} zPjJU>W#o1M@Q;Uw-I3n-(i>Cx=FsnWT+GAT6RU0u#;PBHD7sf9-eWxGQ(%<_3U^N% z60e)%hV!h|*&u>ldnYk+6r(?a!15>3d3solI%KxW$Al)?P(%U>rheSNW+Ice7 zK!<=yj!#q_!C=!?Wr0m}E*Y$AwtE_F{5lgTgg$4o`F%izq+V-q8ngdn9cc%%F+ywRtRT3)9u-QJk@h0ekEot9 zhn?LPWV{siTGv*+DGID3ol7HtDl?JT@FQP6ifi;MfcLR*wg-4WAROBqs(z{!Lp@D0 z@c{)*=S8>3A5X~yy$(sNOMyJY=l*z94f>=HpO z*A(P$7aOUSh0%(? zFZs*0E0$HiieIy}j`+3payS?Bft(O^B5~eD?-B^pw+_M2mtQyKufK)y&&feYN=7ri zU9yzjJI%HfJWI=@f0F-O-b>l9=u3VmNb!sh%^wGR)tHs8Vnjeiy{dkzQRek>rj{jU zHInHm0qa_~`l7|_?01MKtGMl*YwVW9_qMZ@jmyKSeK@}A`Mp%wb!CdGZ?rM^LCgO% zXQ&~!2Q))f-?LcqqsD4O&VZIyd$#-KGn^hX5L5J)wUJu85l1_7u;?tW-3*a-%o7`K zIXM%%y_u2W^E$Uj+Y_E;`iUFVGJ57K^fh{hZW>f?tbcQhM|S_-Ad00vXe@pE;+g%` zU0oxVy3o6z?qKKb_=*WjRd-GmlM_0#eYp3BlO$=|2j)^I#VwBa0yKZh=w!Ls8x0#i zHE{emO+}g=FnLDwkt_on&mT#id6GjI*~Z15J1#)ymXPQ1>4y*4&66m5baDPChEBop2l2mdM)FR{^3dWnZd zoo{T8^?K{!=(ZT!4+2N!Jjn#=Z}1C)4$oKw&DUoOcS5h_i#;C z;gT79dGvfj_;be(JUL$G)~>PwtxQjI_ZUVe4Gj0~=XfL8E`is0l-)gJAx631=hO)3 zEZH`x0Gu1alwSd4Qv96D`YDv~e;9ffWM*pFs<@b{BfJ#nih`^c^n+M28}xQ|%-#^p zqPqFay;RXUcYwh+C@iQz*ZMyIJ7oX_9cKiBU(nD3`RaRBvM7B@>(fVKC=AvIj^e&~ ze2i55rl8?KZC3c~I3RHUNef$IdX$%_XsKN1GBz5BxogipG_jrDBGKP|^ihG$Tuws2 zT88cHb5#k5L?3G9moEdL)9>uq_1Nlg^&ZrwI}&_2JX+1OPdgUK`IRk|Q(L3Bm8T%| z_#SbB>3ccgSw_8oqJQ(BR!pgYU-imm0Pv~-8mwY#oMuVTy)5P&ua_l4Sy=rk5*lXh z*i{jxpw8h6*(9BeJj2bFVD99kWskJq+iR*Gr(QSq4z`Ao#m~1Gz3t%wUVqh}QG{a6 zm;eBQ$c;hyNBL!=EjsDJY`Eb0rM0c|2q(=UnsV-u#N!O=i3mk6aM7>pHf|#LN-?V3 z3d-}5OoRm8`B&^IaYv?)ptV^C4W+x@t!i_b@L6xJCmPxNy_;8A?Or1VXJlAAFz3q( z%WHINrJGrK0UF?9oy)P|i}NHTQ~JGu&;2q`^}X}LaaVHvvEvC3IqPdYKw;Zi^*{0= z!wRb>v_YsrBE8d}K+JgpF8fpS#QPHg?cTJ#Bj`(Lbcu$?Iib6Qr8c)MqZk;z=y(;A zY|%bH*Q_&3Fgv3b8ACB%CtfI5b9YXFrN0ucG~$~QQ!jN;LT*d#gjP)X8ZJ`I!Ff{e zQ8Y|+ydd0BlddM6@D0n;I$*w&R|0WviycHcYDrQ6_r0dx^-xWrP?;8-`UTJRfV5C} z>l%OK5FcuaRVUz%5yY#ac>FpYRn86i>;v#qkJn6`6qP78EY6IqX25_4ewX`)`|u@6 zi1~yJ&xWHSPhG=5yZ3M1Ve1TT;tsiX9LDm#GJ5jqeBHPnUn-<@tBF+mVe1ZcR2pf~5 z?un{|H2(RkhwlTOG5_%P{{xKKglqhE`kw-sxBt69X6FC1Kt{mdEPdAMPPyKXVghgi z%>!SX0T($9#^9H|zBj{sk(nTGB5!S1s*eL5%XE$S+Xu2Z!r7`aK$?>6+p4}^pTMN&uSDzw< znwz7ltSL%;ecei1y|*OTdDabjoMe5$BEy8{%Ata}!hVD;jZ3k|;eUzwT+#GSk%w9o zd+MPAEE7yrXl2DDsj0Cb=>Rv1;6va+#xFXJ#kcozOdlPX4E-KlTm5?iQx;j zx7TKW()Jw1g)3@WgPmmB#cwH?8FoVvMDp^3))3t^%h^0Xc7F+5K*zP41yMI{O>sNQ zEP99$O?j6WWSt?CZB`otX(OqeHsC#J79URkRi|1Dl064gW!016^pf8C%2#}$Yza(j z$dOc=Jjmg_+jUY(*RMi{>zBL?4C}c-vFUDuVDtvLV@&jw+?|q_Rga|u2x$MCXxyse zW}s%0MAvP9W+C4{MP200$_}?y*SLTkuqbXPZr*<-6dImRlTM=9$#(Q+qcTm9TV$@J z$ThUIt*Sh+dy{oKT$1Um6W{pyv1L0q)wGa^_|8WX6NrLku*l&D^Fs9cb6)n6f3x(& z1Jq+|ezXYQWuTPMM%Jg>ApgHJgj8nlT`6pRamM83oGmn~8L>YC4EG;5mwR)QG$&&- zI=6>a$UUhC$wffg`FXj>Cz6)L-6=TlDw)y#;ov(1UUViJyDlWy8y0xHb9B$)0xQ39 z65?MmS!wB33G03SN-aaRb?FI?$Vr?S^GKopj63w$TOj+;mSXCuVe=V9C;%iIPT0=n z)z*<)t*O;o$?EprRy;DGn>BUSA|vQhPSBd-&S3B7Y(<46HGGs$9*VrhVda;oJb3R5 zEeb^!)L0}a(LtbY?!lFlO}i^TF+wH03huZXi}HNUmoaV^OxMEi{3Gjf=RM4TS+8}e zhlp#lQGCmaT@e-bf!%4)L%fr>Kfj2yg;3qo7O!^Nw&`7e*Nzn#_TK|8o$p<%K7;$v=*q!KhOX(4Q_prLxp2cpXi5p2-&lEK(r)Zt zv{<$+e<>7Y5b{JE=O(9X;S0B)8Xu#^j1jZho!~l|`0Kg-R*K-U>gxL_5Gkp0ykUk1 zxapB1m@t3dl#78zW2piv35BKrIKK#Gp!-0)UA|`7&EE>4YEwPPR`ruC)P1;arg@9o z);Pzm9dXjfj4djuud?u`oF_{ab@k4C`cho^8P7PtMp`=g|LgbQUwTCJuAGBxxryjB z^&9&d40Wq|lCLuaE6_2Fu&|L5HTE|)p>l6Vkp8fW*65WEIwh`+k51L?fBkM$i8YL? zbvDaVs3l6z2fH27TgIF#eE%rexPZ-47uXbD&J!Z&P`q-e6iANTIPIu}k4zAs8ze;p z?=}XmA{6V}Q8_gbb?cJV?8r}iS0v7&I-0%FTNW<-N~XMA2~1ZkdU>?VJZX}4@wj1b zR)V#{8*1O&s*~)3ZQdXp4vg2do7#N3&J(-d&beoLx`<@?a|ilB(-1`c+w+ zt&`K}xZ=||!p$iqNv5$%h8z#cBYlR9Cgs~sS<0gnO4`vfKVn`FM`W$Py@Yp^Y(j#O z@<+A^F3NtadXG2tSe4I74=updPG_C|r5Y(t5b0(AC)J?LYSFGXXeXXGk)&Ytui;p^ zJwe{8=w|_5pJcI#1GxcoYKz5>E}Dqsoo)NGmwqRB$`S~gweB{Y>!gJXt4g;W2tSI* zd7)y({jQZiK^-wYk=~S(%0`n8PO{~tK<4n+dbRD;&-8%=Xxb{>Owoe9k|>a*)am*M zOdWe#u4Vb6Jw>EIXi4VlR4_ghwt7VL6_u7aiSd-B?qGM)c*qs@gINrtgpbZF9V29!gfhW`W=i~ePi;O2QL%TwY zY3PQvVvrlI7%~h|cC8}fl=dD13uVRIVwI5OOv?V&Kk2m&18>n~*qma5E>zn8Sw@C+GkBsZ=9f;?%ZmGF$FV0dX1{&~ zzIj5pv^UA1gnJ^n!%8UzG)+fF7j(g0;U#v!unt6NUrnL)E;4(mP?J&P*{bZ)m|63P zt4RbsI7lcoEl(YNusZfK{!q?h4ll)x9+DpFGH+8hOPv-Y;AO(ml)R4p;Ju0- z_~XU(vF9U)F3!S zl00Y|)<}k{I3s^HJcT^Stha!qP@YFGp~xDiI`bkZdmc#tN7WMxvcMK=pm*zuP7AF1 zhhugC;>A1qV0mo&ru3aMkUDLYR8W{xf2RAoaCg?83#GVAW14ZX#A?B5o}{n(IkVayPR zGwOoe^Y&v~nA3D$sqdM*!fz9YV~*#DMln)8-oz0{!%*ZEXz3@Wr(Q}d3O^xMuMmn7 zTLTmW06T6=JNCoO9)C9M(bHNJo?@=4;j&}cr0%3YV2l;5^{*8^FSkdr~mk4NEDouwI9Jx->ulQ19t~u8R9SuKu3MpsW_eGk`E<+U&K4zI6E-M;emFzR6?5_9 z1IFaxj90NaM%}646T7 z{@WESO-R>ktkf2>pLgYtkY^>4z@ zzk?%}ym0SGtn$>{V!lnJsAqXIJ<1E|lJ7(y?|oD{QjabLN-f#!ZidU3M0n}_;MfX% zt-~8f35ApHVM;=TkpiBhvSSd0h+23vm2jdZALSjdBe$61L2B-YIOZH`o`Bb~Y%ygi zV?Ct}s$%ccT=<=IMZs~|925jnw1|;zoMDWB2n9I`|Fbe6CL_%rrJmy#R!zGy#3T{%G-Zf_UC$=_0w+Zd{zD<}&R~z6&%l z#oD$v%;1!>zW!&C+cbLNG$Xf3<49O-X^GmTt+D+1IzI%hZ#knHyWE;5L(t{?W005I zQs|BQ=bk=!pZ+Y8W2Y&Mz&Hrp1((~_qQc#9Nr#!(C%&C<%)kh#Q^Y=HyAGmzaDkp; z5OHnDi-~u3(9+tC135<;b+Sp=OiA-Tr6-HNZN(}3_<8Hj)two36p)7sp<yZ91Ikwn`Ld5Q`Da@VW`&nnmJk4O?$tHioDG(lGumQ;d>vR(PxmaU$6sX-eJ4bWaK|Ys=gbiM3mtt4Y(R|nocs}eP!yia(tk~WOqL1k?2tlG^RB!=`Rf9 zOuK8&31RjWZM^Tg8z)^09=CE)(>15n<9LbtYU^Y%EK)w#8J92y?nS?|{)G{@8`e?CN)`jpSDCM)IZR1Q(s8ATU z!-W$I*cI8vUxgJbcAR=WhyE_hpMbD3i)j6b-a={dEe5>{=r{&(S!rt+K5}3^H5bMp zr>wVM{pyO8kn-F6#S_ab6JvgOUPFV*@D!c=bWk=?n3l?qr&CI42x@CTe15*Z`jO8= z$CO99xbSzBPTRBiDLT3Ds0=FzkHl+OGrQXs0o)j`<-M<60IL>}!c~=t(i`81$xO;{ z@2KUZi03P4k7?1c4iC)|X$&}`FFK6FX3-rKfAat0##ki>jad(c3ndcEy=kf+47=Df z`Y7XjB5sCnzYRuUF>o^8AEJ`E_;*mfFYL?;8fvz>DDyOMGsU8$c&O!xHtv zZO7&idJN)`ZgzA#RS`Lg?JK&xN(_8)8pPwjvQg`bu z;2Ay!?Yn&k21jZKZB_IH@s!w2`@*o@@6qH;gC=1P1*wVl3K`xu)EA8nf`MFAawmoz z7BT4Hw91Q@E_cbno)Sbs2m)fdI+{;ilXMgCb)??fcvSdl?yCK<6XDmw!#X#m9aOfKo2FTsLLt&X1^(GqRey zdLb;n@=VEFmS>xCXQ<;goI{Iu(JW73eGqV4hv;>CCw`IhR8HFO+%)y8(}Pc2v!qEA zJB199!m1wbUV}#IrF~q1WzyC4QFGQ3jlmuxkoDp-GTKAFe3R8HDrBX~+EZ~{7mP(R zUJ4ich+Av4EcRo?QT+|)h*r&E0Yj-rR)jQH!GO`i)NjQYawg_E(<(%c4M||pQ$>7( zG&r6RBk~-==3-AKd!Ln=uftq`oLEnteei5%d3v=zUFl{;e|WUO?ov>NsewRgV&dm; zxc#i4Fy9&A55>0>ABi7#~^?2=vj$_@mvL+ zKLaB%0q)kRaE)+FpS%aWuujKZ0MxcjSRfdZiJ@j&=GIOMZTw^igco_++K?GsHA0Mh z`2}{sPN&nUTt&bcIYh&+HWtQ4GesL7+Auj7U}NUSuksZQgqEclI8zWL@Z%5=bKbY- zTt?M8Y3}np=Bb%8J7?yY{3sk^wG&a@q}iCascS+stqLe)siY3ar~wfo@)*=6vsd*+ ztT4QS|HWC8O{O4|mXAb2&K^U4s-DrSM*EYkOyeWx7<^)>qyi6+&d0S&^g4pH85fb&)l!cLTcqG2S-Z(U( zJn<%iwuS?wt5_N+38(3^#UrZ2OVp_cQ1|@8*0+)S6IoW5ek~0a<}-9g=uL8MWDo|$ zkHEHC>ps&i1|`KaBO&tF@|;Gk)iIF1nQ@wb933jN`oFxo#>hzrZ7hAQDz*~8yb&D% z?!~#-m2&*iut&dxmpN#{%1&xw9P|A$d0lhH?@liJnuMkd-3qjT74TdA^dhmw(*Az+ z`)6>On$QGGWk^F?#kEY341(lAG!=i@m zli+zT?Uu!ovXMz~j|+W$Y@&sF4Wn)q-^!?N;{mOGKWNxb=lP}WK$@<6GG3%vURM;uq3VMNZ8jV=X3UQxHjrzS zfB*yK{7mqmcSS=hxL}XS2gQw1jeT2B+T&buEUqwa5Ly3`&-ohc6{3AF!S>Q_59(Wa z&~2+qoyw))`}#M?`;pd=Dux4liG4HGYYhD6VMo`J4ok99&WkY~`WHRV8@4a(Y2r0X zj`hkngg!4wL{#kxON|E0^M!O+%apPgcF$e%}3U%JJ z2`z(X6u)UwHoDhxb*@G%@64#VBj~gm8^cpqlOvIP*`nW`VkqZOGx#260-73S5t$B4 z&T|nrTrfL1`BfkMqVgMUZ0!|nYL?`7!Ion5TuC<(9D!TjLQ4r66tev>U>29EUZ?17 zBE$!xc1Bcx(ngJVMK7*wTV+v3kZ^3g1&(B7A2MAV}@ zsn{?)^lkIv#U5t0Dh|X`->z{kq4Ib9tisUDbsy7D?s}xBC56Ef-ef+fSR}Y7OAd_p z)XlzdZ_xD+I$-hqL4)V<7VX~Qo9Cv&JzKRf>`}i(<;vgIRlL8pF#LSZ<(6x`d%)(S z2=86iSto^G0lQ0ZeL&QY@p)VBE?qX)3m*92Nu|Cup-K|$Lu}oscu~P?MDxAOFlfdn zTjnZFOS(7Y{E7fmN1_7NocZ{ux$`k-i@$a7gtQfkcKjHqtJQCO;T^$`GaQC*vd+I< zg&oylfJhDh#Y21azf=+QFEiMva6Vi*$Ogt7cYc4nI&-f>zP5?uvbA<@rja}LGxlqL z&|Mut0j{((e^(pK6sALdrj&wc@Vasc9l-%SXlJM7L=$R11RR*YWUks)n6@fT6M(+5(hG-lP4H)ry18enRzQEbeT z)U~vVd|JT^e99ifz_AR{~jcq$X*-KqyrW znvfDd?I!1N4C14<3!KmLdcI%c-Bt&M^X(*8|Kf?S&-N{lBPy>!&hwfB2Ny56}ILTkDh`JFWl2AMsma#9nU=sgh-^te(Sve literal 0 HcmV?d00001