*uYgtc9KW39tAXMXUV)(`&6Xi?uZ&O2)>1eGfqMog&CVa;6koU1B ztiw)^n!wHIj&20$?J4JJa*WFA+^|y*;%?Z8J-J5+_?egG)_i?po@7pU-DG4){*C2* zXGZ93#kK|kxxx4#NALa1lum2nB!8K$oL%(NkCpiV%^LcVyT&Jk$3GPUkz1Exo2}i| z&A#d=B4vVJR^@bch_BSp&s4pApf3kO+5l=|3ya&LmHI+;_5-_i9&VsV9Bs$TP+993 z< C4x te&(u*(6;E!uDA;GP@{$b6!O; hLhu!-EDppKQ{kJpxzB6eyI2R$4LhZN%d#^QeLo%Ql?mS( zWP4bh7jSO>cW?edssaPK2Aq*=Nl;unFe&=gN?_XU(6MYP*`0|&ZfMlD(s|i>Z*`P> zmUJRN*`29Fm%(o(mGQC 4Rd3${FfpG z=h{hU{^}gz&wi)>O{K3fcgaj1l@|Kj`G+g~ajfzK>8PWx!So}$ Pn=96^2&gBCK_S-N6DS8aV0I+n{%GB&Y+JV-^R1Bf61L0aiQ7L z*r~gmBHCroV0n5{(7|9WeUsm2O3^Gq-606KX&s`Hi`yn|ypHkkt9Qf#(b%UKT%XWb z&%6-yYzE>=h*X>KVD;e5r*GzOAMVkv67&k{kdbyr6>~;Iq1U7vm rsE)7L6B@qbsgVfL=* zU-c2-+_f?_*FgF7`j08Hk#|Q$vCO0-AJnEn3o>eBg<>u>cZ`nT$-MPSd3r&sxn`Hh zyRn~BJn-(T1;4l-8r)uc)qs2(r>!G^e2*}*(+g-m)8m#w^FB-Af`;6U4DV+D>WO+} zW{tmM_JHZ_41d$ISEi>?o-i{j_@}z=>MScD^O28FYr6S%5@vIl)78nOH#PiEs^kNK z7ytFKjmbNz8p`~=oVvY2|F;7Jai`hT&}e8S@p8#~eVe-6gZfiwCuhf9Xago}@a*DV zc@uQtfLb+TDU4MM%j3p_mjoIqHxm^J_k27YN@G0+K4Dg^LYI!G{IB((Yyq~kG40tL za683>-9Lus3N)ioI1@9xtR2_-`Ihyx Vk? aOFv3lIBIlKAcM7*VVw@4Q0q>Eti?kn(iwRgPZ1&4 zyvHvq2q(+2xvPHSjSOAg$vwkXzF>+8S#VV$4odV}Ug!O^;0;dJ1+yPVL1b?S2@9eM z&bNX(?(#`q1T)|7wOFP=WLT_S@`R3{`q_1P#}{zllOy|EB@r8&G&3TK3 zvAX_mY6HE{*f`FRj*UkYuh>Doy{Tn~wf@6Gc71C6dN$)qM=A%?#C Kj^PTOQ^G8A#maGFFPkRZ*a)Dvt4H&RU+F7bycJk@Y zVBynSQS{@rjw2=tF`;(aW3Ib>1l?QNFHesalbCT{HvoKO3DZkE2?)2gL ;O z4=SzufG{qD&`JVl3bAmkyUnM!fADS{-a01J8zCovyt@A91f2Ks)scK3_A!&&Y529e zvN9I(y?>&u<-qj;y+S{<^Ud^ xOBrLa~2rJ%ir-LMqEd-A^;7r|JCr9p}Z|}X2@#j7tS_`^R zMWgL&so=T|&2-l1*NFp{k0hB6gd{-}j_w2ALX;JPV~*OEk6k^wC4Vf8xEp-2lH%() zvf*2u62Wp9(EvU>T6=pLQr8DQyzd3=Ss%3qSEZ?=?#(zkDUIA!SVK&|oNd#cAq;1t z)upti42$wsKUGJ;pX{uUY~!*@>U@1&*p=5iI<;<7ijS6BllO)p#|4Zv7zqCMKSeyX z7e8tF_~=(#tHbZMQHZda;ce+MMAZN(xj_|t$eB~~WbA@mDF;r(;MARj1JX~D<7PFQ z4a!>L=){d2uE`F W$>KEm8B}ol7Z)E>NV)%eHp0rN1b{!K@=BU%L)ILvfD*>#tmd*ypvG+ zb1py!`m{>OFbYLh-^|?mnX{6??bB8GzJiKPe8})@jSZ GH|WfRG;0m@hFTH9)3)@QQ(6EVjsl&=RWC+YS3K`;;~R1 zYS_(yAJ3>t1zxC@*}yugTJ|S`hA3lok0TftMjs!b_onKJZS>^UCyatC>Vh%@>yi_@ zz&hYePU4^vt^(Cu#Iwna@oitfyvuS3sI_uYdIs<=^C1w$`jxf~bMh;+rq6mX#f56H zexS5+5p ig*%pM!=>x{I*-_)>YNHA?-epWjmQ#c0;=oo|0~%YBY5n8kUn z8}iGm3Q^m?t{WD&a%>~%ceRHwOJDDZ;%|!o3yaBN b$DLX=#nyF!9(rP3Oy#Awu6T>HX4PAY$E_@YsqlWpg~fHiCSh8z z9n!_$q1_}Whs2MTgZ<`cr|`zlEotedLW2g=zGzijD|zEx+O3vMV0uMy@kcw&!mGcR z$)2Sj+7_M-XK9UbeP|!Vsm}8~mhpqs(nIY;?}CV2$0T4Pke{*QkKKn=9Uj%;d^w17 zu8n!Q@K>TfPq0%I_9OA@?XNza^n!kDBLy{-GOrTd$yb76sKSSYQ?r|j9K8Vhc(|$Y zY}ZcQIqYrRt2ky1UL{a3fR(~l xWuGZuk*u%bcRSCIzW-cN4(aze62ueg z0RUB~q4Av@iF{!P1MUzDk2B>*kBw%{!UA2rz$Te0qChYrJSqZKRHmdFf9XyU^vn z5>;hJ((}JLB+nqPx1 R(|1>c)wlyI95hWgYY)~B8?n*1c5Vc`xr>Zi-lhmCvDR+Xny yO$i5>CgO3$#oYeoZ9C<04L}&ox zHiLAld~KVqhn%c*%XI4*hlRIf02|k{v_b0j{nyQ1U!MqOCcrvBin2kcM8$+A%(8{& z13&KnV~E=1hyKB`N`WU$bR?FIF$8d&&|1!w6jlcW>NeTW8tpmS7>VbHa4l+oMkYth zA)TtFUnP>IZk_gcycWa07w;u;bNHB!Hl&wMIM-4?pQgTN9+aVc*=3}QCG}zCj9=g) zLK;_{hA(?oT79kyM^UPE+BsdR!|zFUgbl;tgJ;ZZtkh1gM 7=0P zwS0$AT6yYtR7&26c U(w%GZ522J{D{Ljd^q86Ia9FB+u2&jY;fmOwsIo%>)%PAO z4?JBlDl8!RF6gneBD4TffJ#ln46|nCatLbu4tKV9=H&%jKVCU(n`^}(?+z&aA0YN+ zLOObIt*Am{f}6?Sm2B+pG(Y}+WOJXny-Ti;sDbd1x%-Mm9d^wc{yt9jlLuFM=*PRX zvlGLA#K@a(19kKs*0C|cSE^t7m0raXRNQQ}alL_stI&a K7Ft;2GXDN zY8rA5ce~2U^m}m-n=?hQm}yv!G`-e%*AZ4D3zUEC^4owx*~NgWllU#ivUZ`Ru=__? zvNQVhkLbLE48hPW))#hSxJJN=rNMn&byC8S;%LozIAwwOX1C`G2Rc4g2Bb9J)xv&W zY4NaYAg2S4_xigYVe4DWR+VxGUvd2qAJfBA+00b&U!fmN1#!YAkXaa*dAf!$SW+7)0^NoD=S zcIe&N^%W0IBPUL)e_u~kq@?Y9{0lScK>9}P-_f$B`#psdxL#trtPCUw4rIF==@H;> z(@yeKa0!$z%3E`Bp_5rF59{B56UmxWY=_LhI n_8K#^f!JhT=U|zAn~WLUBF}hW4#!wjDxP` zxdGD9P2MGqV9>uG#%Q(&^mRVool_;l czdQ>8}}m9Qmq(o4sMl3wuP{Y5r%p^0;N&)23uBXBTz3+h>4v-H(?aplBC zfsHZ*wA>O~Eg$tQ_y_7A0p;8z+diufD`7(vLhyIwKPQ=+X4ZsD%G6+oHj`)v!&kL$ zx)E#vot4!2Cq^ifN7c4EWPt=CRPTOzUzvYzKJ8n~gE*ZP(tAOo@BS8R2bK?qN7UuD z4N`rL{Gg6Qe%{;Txx+>|iJ#o*Gr<9f-Bt tN@ZLHG&Lr)fsfYAl5*X!LQ z!GkkRr=NwEQ`wsay8Dj2gzdH7lECWq(fM;0=<@WiUwIIPzK)DLF#bAQ>9g+J%?R>$>bmjh zXBj1?t2?}o{FGscF{5W;$J9=%B-GIz6s{%qK3(}OLLhLF0V|RFR#6>~V(s;CC{3GE z7~59+V`aQe3pnuP@sjB`k1*<)s2&Fixi;M;MiOpzW+>B5QOiCXEIHryVuq%{nZ 8tCkR59F z5xV GXp(k=AUTP54GoBH~tl;F0Gb$GtDNay(C#P?^PG!i?7S7u` z)r8~^a9<5jg)FkA>)~cSJQeIORWJeJZ_K;czo`fuj^Q84|!e9#c*Vy_BR?>LFW`BJAUdR*%ZyguF`7O%Vs z&ie(Mf^fAoeX+e!|59x)j`HY8qhVtt#2tyB%5yuvKpUNU>Kx81EI&(unn(J(pOct) z$Hi>*ead<8Z`DVzYerpE)w21W;1r!125PrDNnS@ZL*P2 1M=V-m92aef=KzjLAM_E f1O zf!1*^yRU`lNu#_(O{l!z#;SQ}qs@y~M8C J5r_n^prS9!zj zzolG^A@c+Hy6Q~{TyXOEb_q}Zd2L;wk@D`I@7*5v+|Bnj) `5HR1m&TD$7-o6)zo%H0oPPAuI##s#78;PuE z5NAu+L z@(4$vdIDdXl;KK*mtj9>d&PWpX_3q2_Liz93TMh2tbcdr86U{! z_)3WK^g``%-C|^QcO-%U`%c-7Z&W^%;Bi2|;$p+ RhWQ0hd~45jfnl=F9X!uwcf|H{$0QZmrb(O5c66-p5&ZGj z<91>{Dy#7AV j^i6_}t_Uq@5eo-9{h`Jsf)SxzU){bke0;JHK>pXdmBcY6AOBNin}AET#JSgd zl?JR2f3dSFuwSrbqd&5!M9G`p1}H8iPwv~qRrtg(GJ4moS1-Q;i|TPG;2!9EeF%V7 zj6-9#FD!hz?7gf4u`RJzn}|VT*322WY^-8x5543w3BwA@z1YXvHS@}8Tu+FP3F2OT z!FwVuDXS8g2?y2#XKhQS5CNJSsahA#H^y}zqOR2&h~6Lwd(H}6+PBDzvix8bW5f}3 zK9Pku(EE@LJa`77y4FS5CXpHG2~foB5Ye`!sQ`6uULP6FlAZIP2}+AMjB8@Q>l*{? z@lZO=GS@Bjpq#0`0Vam0T^i29FHFUza;PC`j=8ZeJU7!%E-HW2%7WrZb)tzE$?fdW zSn44+zlie~JI@NfJ2>L{TYIb64-1=12waF_fc=+c*XJr=FJ+G5jnft1ySGKhXD6TO zlk$3|*r5|nVWi)*AK@BfuXZ52JrR%sEr|SH3n-`Cz i8I1;i+!+WwX7Z?xFR}2xYcq}QSnbXWfZC50!F=sOGA 82VeRlaEJycjKhSsnMeD`7O6_?M)&`2q;R~Hx$VbU9ik(0@LZ5iGKdE95 z5(
Vv_uihk_OF5 zrtoEcl0}Xr9GR5V @v|g4Ey|5j9-WR>%>M14_j1A{B68gYR#Rw+71+Td2A{pNe zzXxswUHDxRgbMzHAzJ@_N9MCFNr46{LHsoih` 7Fyeo=;z0P+UFU|qKa<^myZ;1Uld&>QCZ`)=}_o6lmmepT_I zQ4T3U*?+0TDGjyN;K4`mOj(dZ#7miCw%KPCD1T(3e)-WDZEt}nE&O8fSNy~A1-`@k z8rwQAV?p{G8MXS)C!UqbzT}>=2_dHYoEX(lPgZc)51H3Mx
_&FOygz;q#-#*~tEiJuoa@U^HK+UuOj6x!j<>ERYKOk)hvW8N~Cnn8`@l zyKLE$Zt6o2=@1Jzo&^SFwU!{;@?oKUKbbZ}ULfX~Kgs)^9X!RmwZr@V8e3N%Ga0EZ zXz`FT0JcTXvEK1tCi@q>zUz;p{a*_rC%4x1UsiP(Ly=MW`k~!nUi%_c!!w?slH6g1 zq4#~$5mt3kEOWn}DDK?Ln0SXLtlZ#<;|hhxj6_b;g%c{nIfU;{7z5KwwEJx@J`=JY z8x}QYPP$w*yTv y0);H|fni7Nz@2pY&+ zW7qO%t8YU(lvg48@12QDw89N<9rSO{=O?`SI2%-L?a90rNpW+!(|!&=eCITksKnt6 zlHPN$N#4e@?1sYSz!xNJoxgGse8d|1PGtjJU#~w5iLJFtl7x%$$a0guc zrX(Aqa@ry9d#L;Far?AFSVMHG*YZ13i+D+!Qw5 d zBBu$Ejr` y-qo4kX(t%my-VK>KvtV_fvF}$njL*t zxkj)84fd)e+cyqW38R+6I#*&>aXz POjg_7mT!mnDVmZer<`YYR bmXG z2M;`_*hNLji;9YDySk$%%3iWNbLboFJ>Z!wz@Ezb+EWn*dWh|>GLp{>k5_R0K@)(J zu-?OAf^#LdN{6h9hmQ#GUeVSHQ0;$eOSWly^9q=5yD4N?zM~=smhX&9b0hHOZ%WR# zw7#8c#66HUjmoNb=!(Q8;pjNn%B0!4zXlYZCp%DufZiIrz{d(lo&@p+@htNZckKtK zpw7rIKYYy~pNtM6Ee-{n#yDs(aPF^5VA5DF#MWO3*}lB0s1Ucr*^z2KH@k_SN*msE z&qDwOJn#8ZZVE%526Vx=`)0ViK3n!-OL#22FmWvArlm!R+eN^^zZjzX3Vov!^w*Q5 z6(7BHO$IKpOl;CR7=yPb`Dwn3j+fE0M1e~ZiJ$KEivzTHosXL6(Rjh8_axEF*cl=N zhi6U60Q#)@;U!0^>!hjvMoHkg#>I$CTDWng=~LBbdimW2T?h?P+)NF)G(`L^)3u=n zm2|(9+_o v*U4uVp95}`+ry^4~)fm zQ<6LoKf-QN_UWgPzb2aa-^Be=zF-Rvux#LqnZ4>-dkk{n<_b_oMJH3FBF=3&Vsj-# ze`pQiFpRi@{%|5K;s*X2-3`g2ME9+6#Inf%dyQMk49rLb&<5ZQi#hQQEmprirI#?1 zHcH2ej3tDT#b}SQR4r`?IkgJ*ueBmO-j;M8^9M0DJ&HJ>CBXgr^#dm_y;m|Eu)edj zwP!;f#VvkXxbJD~?_|vCL9{!16rh=LN@3|R_$6~}4*$i+JHt649;vzQeAm-#@lVb` zk$gc2cA2b4v5Ip~BB?+V$6y|#x-8c9rK&}-yshV#yAdtGhUJ;I@x3F1dXzS8{RmG} z>v^^oO6nx}5+c08FGVs>SYqXpY1yj;fzOA$JUleHcMCq>OJO3L62ayZ+X0A7ZR!Vk z)!UKcvw!?>-usyGz{WQj8uEQa7V$v(ji_@>X~2mjA?^A^3THm>D%@zweXxB-UiPSq zd6>8!js=%$@R!s&Ev0YK{k@PJxE^!blO0PE`J7g*J|SLHI-QCSD)19LNJ!LG?K8 zT_ E=>(Ep@lyyN9pq5BzB5`i zg%OcW2S25oW_idryq)iU{gzQ*6Hg_~Ih{&>`E#O*1&{@DZ{&hcDP1alOQl!Ucos^y ziKWhp6q94p&U%F$`y>NY|4yymqu^X5S|P(PiD7t{4{&`5_h!5o+c~3NHTuGzi#~6< z+RPF4{6cCcd>)#{_Y}t^@u=ZjRAAHSPo!1Gu^&W}704#p8ivB}d{HW&((jj3ML;~K z|FoPW52_aKBwqu%k;i4BD6`^16$sn`fL0oZ(r0B&6r1Y3#zTHZYVIMT`*(`QB(Y}t zx=(zLVqTU%`WkC5hcr?q!j#McKm3~ib*^haxgXelL+;(aVPV(wtIKccC6DN+HaL?4 zkMe3 v?`4d$bSMz-q=E;u(IB} samB!Fqyk+E?un4$ayg!qU9dcg_6ZpSP7;X)JvF %SJ@uLk zA4XY!LQB5yX8zZ&bu~F8GY+oJ|6n<_^D;#k{K*lxz-#FJ`RGIvZ)glMnh)%=@Ogog z^MP!ZJWWoZqy8ucz{W+{ib8GIXv?G~NHo)`Uo=>UDTDW!_R;9V%XdjTc6JjtJAY@I zZ_OXodK0zB#8mQ+K$Crv<4EzBD&;BE8!)PDuA~V;@*AH26)?-*eDfp`2U69RUG0;x zA;`0PA<^lEJFdAa7m6RZ7AxmLcQYg&%i0o`qE>|X5hkCXn(JL;F?arK=9|h1USg9+ z=1zxCalOUwKT!dfiF#?Re+VZh<&*{u>H#)vYbE}G9K{v9Q7PqYm-B0Wz)T1^Add82 zAxdA`D6KLyzu3P%usxdMt?`|Im?>ue(06wVHY}Ak#9ni 3OFy|r8)i 52HT-E70A6LRF&7#7yJr2p-SdsT*abeLhdI!MITE9~OH@W)DjVV!{p zp2?4f?T`YGLt|QEhR2x)!Sij7BvRjvhS$Fq%fEI|oOUrTaIXI}(HQzj;ZXrsfsryt zBQ!$`ts)O^XeS??1#X_%p${p{AITUFf0F}mwaM^*@1rP&c)4dFHlm)AR{MaHU!I!N^O3;=hR5GO1Lq2Lasg29hV5w Dfd7d+`K!9!!wE=nO8CVK zTWn|n7h8jH6zD_ym^`8Sc#B-i+etKw+oQ2z$K`zD*Mb_4>Sr|KYoTc-So>GXJ}8 zO!gP?w8YIEE5fPnHJrlW=YL%HJj#Svq(L3|%x+brTi8XE+yI7y`BmoSCymxoXiISw zsQt DB3Er4>QDgEX3?gL2Lrg%Q2qG(hy!rZyo3ZVx9O^Kx~b z+#X3lq`mftQ=7iBs_(R4I$%)+>MJD|j_`Znz2|ULN>+=ZkMPZW?#tC_6(!0I*h6i< z$$o_pl&0IR3%Ei5wgZ}JFZpx3^#r;qniX%cOZn^WWl4q>$@rJNv}$tw>l1ac6VyV6 zpzwIN&eLYd#H86neGfx@+NYZGVOL}eKjaBY1YGc2m>FCp>NHJRg0%tf{fU7h5jzS{ zCaaI(geXpSM4bn`KLju(WyX+%CIlBInh%pFs2*$dH=_RFEz#kZ2)Gk0JL?y6APwwC z6hHsm;rAdAbd+SVxVQYZLY1q7BQZnxM{12x7x2#}^gU^5jZ|o~(rye99!%EJUue!Y zk5t&bJQKP%e(Lm1rnjhz1;fn1zg9&mc-uC2+;y>pw)OZ}(0Sr??*O~vv~d#ClENw` z;JEf<$hPj+5HYjn#=K}vf&!DxKR5NhVl>mhpgAP K8e>QbW;`%kRUZ4pC2^q0XKM4Mbjl(5dUhWqFG$Pq2ZwqQ@?K5q^G?@kJlz671d> z_&BigGt}$0y>-1SlI&MOe)Zikdo698Fx8TKH!Vgi=Eib=C&P^Pe%4YI%X4>U==4|| z7$$6r0>EANOE8|v8l5f)?6O4jCf12Lp? cVIoV_vQGB|0W2}cz_9) zTMG|pK=P@BDT8$=6`in$nUPV(pDYB*9=Quu+(D_J^7D7U&pEneX;Z#Am3(yQ))#}F zmH^}+yf)y78<`Wr61OLYv?*!CWv-L9@H!i8&g(E*J!mPCz~W~`mOH{63vSL4wVGXI z*oqfgroK3{9kZDq4oh?H9yA>%&CJgYDE8$Srh8ju(CuM&E`~2ALl#)9HQixMq*;8| z;WBjoBz#FvTtS#jd*Y*S?+v7SZu0*5wI~ivMrTw5;y8jeX6U}f`%NoJl*5&l`FR4J zz;&)}p;?ClIC+8q$qkxM2DaILm1KibcMFHpXA4gV8-S#SGVC`s$-o3*nauiQqYoiu z!%YXcoaNIQve{U>f2pHZgl704@MQ$2$GsY@x#H(Ixzm*>YalFcRthv10}Qhpe9Q*1 zW6;2duhezSRiYv!g)tc&3xqXMz$bF3C9=X$PboS-Mv=GF`)q^e=7@mDaGKImt*S8r z^|}f1qfK&ES2cb2nj$w-P&w|%mGAmCLaTop_*CfwV7?#%kW*9E6bGd~#8MxjsTTzg zzo)eo0b%%DQ6ZM`aGw=(lv$s#Q;pq@Ff;5)bH700c&e32?WIac1FN LKQUvM+6;J28^zD18ysj!z z7NngB+yT$qUmL?p8{=4oUB8a0g0KD7?-183F{MKF_AB|p|AcJ+oS8*#cbMV3eWZp{ z6-6fF>{50{|H6Twsh)KhfeVa&D9{(P-YtvjKXWH)!4_QC{o?{khjn6eV2YLIjDjn% z8$^dTcwqa~+w(c+!YkN6{Wl#mH1ZfQwooA{Uw-$&pF{EDR$JvPrbR_dN)*H7Y%CJ6 z5Iu=qyq91@hHXoSw|~k6jL@~R7hl+7-y9LgcoJZhJ~81y&MW9Y_Yj`S44|zDVnk}n zlVD?59cyU0crmuJVBmU&H$Tw^T^N=)&UkE0 (q_p{rjF=RJ_AYjE zl-D1K?dul>rq8<_vJ`=jM~S~_aY;n2`Ml@eGs#81)e?*#cLB|?A-8>|IP`t)?8}-_ z4~_BzNyQ_esHqyxRK-)v2|TA6 IA` ze&HfwE$e$-=}p4U)n~$s(9l$h6p_;D6Q4_1C+9L=uc~W-XR3w|*zYCV8jPm_{G3@K z@}FbDV`mWNpVA!*LOD<^XufZPEjZ$vxzR2NPspYRd*PBPV^^(<0MEvs6U|2~T{F0B zZ+>w`n}y9=5EUBaFzJVOx|K;@^N1ZK8m(MB#A|mt4`$GgN#!OoH+9Sr zpcZd}LAxrgL(oo~%If%eWQ#-R*U)%H#%~6$S`z}T >&7{$-gT_~Ab8YAXrSjAaBfuO9aLdn6kQeR_-VzkNc0>zzu{c zp1tini{m%cC}3W8OU0>}Dw;s8kwZ}t5jIbB!DiauVmL^_4H;IkG7q{7_lNPyz9*0p zpPIx#%aUwnZOEZSAw`9Sp8R5#rBs8eVYOho>%Jku8_e>g2sem%77Q=!AllqlZ@Gnb z& &HL@0^&A}oG;)lZ23&!j8%j$1rrmVtQ zR=LT{61zKO6m@`QW$=>;F9DbWp_m1AF&97^oqu%m)I$S#Tl=rzPs<@nn(#LR`@b{l zSD>nvyx$@36~F}@2czP^B01c+7t7}c!0 N=;PKxFTNVR@J%>T#_%d!+(u_Qh^AJas~N)XnK=L?>@D&AwCEJWRlMfoO*%vT^9 zLF`ZF0P{<5jV!1&>6`5rbc(DxZ();xD5ZQR#ruVz4dM{-1F(@Y8BY}i-o3I3e`wiu z&EQu1pWcq>P)`}hhQT*EFVDbpv4OA2F=8&tz4wWh81N8#CQsvCo6#H!q!U6YU)_v9 zo-&TqVr2uo&zjxiB43v7!@aMxavndWBT#e5<8ACv$I$=7O%#F90AK+Z)EYkL0R<&n zsb|@BLI2rSrX5L 1(a z%v9FHNkEJ@xCRUCWqOWl`5X$0v*`RNdx%C2Y2~~F<}0oh4-^KBO}nrgki(PsOrYeJ z6^Q3;*MI>kJJBfYW%Tc1(u9ts(9uWaD`O-QsW{rbXjvhwMsd)^Uk9x5hEzZq(HY~@ z HA5$-aHy7VR;%p!{8e8Gc|zd);jG- zu=xajCKqP#q4KHVvbfgiEI+n~{GzQ8QdyZ-7dTS_B0nntMZChV)c84MLx|662KlA( zGjR|Hud$o@G79nE!>8vPxq-UF@&M+IBO%qUq|g)au01R~MQ^|W?Bx25x-+Qv8e x ~=O>mR~6G9y=|KReRwV%HEI;&21ktjI6Db2A*E?oR{(kgobB zzw;q2DT+(dekM&Mu{w?)_5V?q*>*^gPLq}Blant+|LO>qX3F8 zyRj3nm;x!*T?TdRlzUx{iw5SF*DX3KWTj30nfyJVX<>WU23#GI7KFk&o8q)xT>;-r zo;NQ>ZUDn*7HsJ1ug`>Y L@+aob7XAu=4(2| =-r z`izI_y5PVx!Q4)bPTeR3+94<^AA`ZmD&{{ ?hjT5}p zxNG4*86T7#{#Z$j6YP~oF&16TLyn|j`?$C@cp95P$RJShV9%VYilCL~HiW&3Zd z-$tA!hize^T X+ME(cSGwjd+VRfiq!daAv_<0OHk!DNvnWj0Xxg7em(X<70hllbR#-yEO-%A`Ygn zg dQo?wML705q0i-z z46?>ZclC>%AF?CZKgRJ2QW~y7W{Z--Zdz~j>s&^@^qe)uQMBomb~5i2yM^uS#Dlkp zv4h@}^?4#5SqMHUX9JzonXb;B5RvvDB*Z?qOG@w^M4zow*9dG05~>(*bOkikx3Ph@ z(j`eyTt)ntZv1`=jokeJh>d}V#fppAG+j$1OjPWDUNm5YN$5MWccgnSlcvf$XMGLB ztB)CgYfj`4b~NA{Zwq#T{AYaf= 0(sp~F-z*Tiitaa_0 ?g3SdYsSlM^tKK$by=j<`jM{eJow~M+MsMjWK|HZ#3{G45|jll(>m-f@A zyMGsm6r5 nol^?@9D3+qI{6tF)4zQs7ocvE{0`>XU3@o?xvz1^w@LTQ_F zud=aOCG+ug+jxV?A>iWkmD$qH0|i~Jy+)L4jxH(@zWWZ)WcQ%p0#8&4kq)7fh@J?) z40wEzrx9-Wq+Ai9n83j^Kbk_8&E(KZLHCiV{f;#Knwy~cDs@MnCdxYCq5k)Ii FuH8K#Gml{&0n%}0ef-`_@OLI%TbZ6 zBvB`ej9uqZ-hZb-O}1S>IWk*>6f%?4x$ub8Ud~>~MjN9zqrkU8qWa(2kd{QYubz;H z@j}%iG~X&N#wvU+s+{(9FT2NVF^bAJ?9DHEC8fUa%d$+oL@bVMBE4=#`3y#5s3H|n z430^n#+r{rU;kOY 9t{PSgJh1qu506L@0~#n+%EDVhmDXZZo; zPy#e7u=R{{fFy9TiC4hKZUsOKaDR1C<`3V<0(tv?CFej;4i0_k!5!vYq>*8>od+Ix ztJU;#4xQ!&IrQ<3u&qq^MoJO%*O=4%KZy4bZ|f37-?dQ%g8 Yvi zHYPKvw|^N#EI*JOHp|NN4u63l0dmq6Lie@dmY?<2p@Ir;M2&w3Q36pP(UaxG{DZj0 z2IWX`kkj`pM!c^ik(s=H^N!a1;3N4V `uf~mJwh7k;JGf+!QETi&UViY zWrs^q-`_xdfGCe>ff#^T!fx?cmI`laHtcwOFR$4x0cbpovWO^t@Hp%Y(THV;9}pGT zjrxX%R7ae;to{EGU$8+pq`teeTYWns7?FZ_F4Oy`pIyx^wE&HW^g3cLKWurR;?KZt zki~@Q0%99t0b(p`TlX8HAG^T^BgP@-AbeO)i}Q#WHtOCM`7LAZjsOH3$S0Qo+8`eD zL#Bmzc02HA!C@&5i4H+~yZIfM{d1LXQl6Wi?9UziS#VeZk%-Ujf&g@c|9^-Be1q~} zC*mW-o+9#jvl;l_%Y$U*W3wya|B{6^_y%bshB=E~FG2)xjhQ@r|K)Q8ma`cFcxc=E zgxV}|fp3mBDD3mIhGTSV5&7JsnPZKg0r~t%Un)uf?)u}P#hBMLiEoNtyMG)Ld 0Rb=tjYTNtzrp2T<{HJH{w%0&-3>}{<)ta z+G?b~?&D`c7W|>sDkCg*+-VB>r%cGH=wK*fA T4&RGe)7$)BIdmJ*51WhXum_0aN7 =PZ!o>EJhH8!F#PtK4f<86(u!_UY*bSs2r))dys2FWi%-)FAO5~BE-F(0I@H#NBk zi2Vm*jf4ClS{2mh%u6fO=My0%kHWE#5ivQ5Kg-AL5z*O$w}!I>lXFSd3<99M;amJ6 zS`7*8CVwM8wco&Ayv{ ?(keK@q9?hB zyU*${Q_Zoj3&CypoYl-5?X{=l517Zp$tK}4qN0bny#PI4bsC+;AEw1N*hH58Y*vFw z&sSYx-zngQQ`FXKhKIU4j-= BUi2P-UG~ z=4uahxMr*FP23q{RNY^uy9w5+zS7akE*7Bb#^svAZ&q7v0Nv;S xBSUFN{yU3<0hm{nRe^3drNE8~P1H^j|?7V`A8@R{hG$4@+jcGp5wp(xw? z-8B6wRxkJU%$ufJmX)a9-~|>DYnd==ZGgK>O&4_b;Ride5ukqdUF9G|&7bG#6D2m5 z*}xj96qU1gpG8K>Xq`Ksa0l6z)`M5SR%8qxT72O2R4X zQCtq^r}QQ@d8Xx(dhEf9u5K4VGI)SE%o@TtdFX_b-R-8ozy9&X#8RaZ9X! DSy_;EE$lp$wPs=}JW zOD62$tiQo*Ch+vYKkU0fhtPcOc&aL{UwjhuX=1fmA;<+Q*~H>VEF$u;Ocj0CUWqZE zE>^FzDohF^{>DO-Cz-jBrl2n?lbMxQncspsBDZFjrnW=b$G*>>!PRs9U4wlCe_g&z z% HJWoC!bl>SdAuL7jiL}!2E!A^=&9`HOJPhJ#uAtgFvrO> z_B*J>Ry7tk{kNg_m|vBiJuU;97&Q~A$3FK8Cct6rc|K&%O?-}N?C+8pIi6zL#8}o) zqC(yqDZD@&PSHW@p=Y`;BeIe#gYHKU^<2NXEbrwgYsM16G}t@r89iptPV*e5v%i1H zOpZkM9M7{exR#x7(wbT_t)!TTo*|>2?7bGcrGDV~k4$b2FU4EzUG{*Av(O_Y*wkQo z&JCEl+nBL=Jw_zteJ;;7^b?kP`j&1wu3q?s7mjDVBG|xZ3>P)APucUV#twZ$hPuqx zQI?V8yB>O;o9Ehy0)IF?q)qfCZGmR#{g*wD(u@S@8P#HEt|2>z4VhL{i~V~A*6f9z z_4{i7k>N(V?(3opr@%|!kSM{M=_!5Ovia~0D_YOiH`1c#)o-2p^{=fri@-UQ`}~D7 zwLZ#$FTVKVi!Z+T;)^f7_~MH%zWCycFTVKVi!Z+T;!FPZ|I~=rhqxT3>i_@%07*qo IM6N<$f)$4FVE_OC literal 0 HcmV?d00001 diff --git a/alien.py b/alien.py index b4338ff..06d5980 100644 --- a/alien.py +++ b/alien.py @@ -1,5 +1,13 @@ import pygame from pygame.sprite import Sprite +# 获取路径 +import os, sys + + +def get_resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath("."), relative_path) class Alien(Sprite): @@ -12,7 +20,7 @@ def __init__(self, ai_settings, screen): self.ai_settings = ai_settings # 加载外星人图像,并设置其rect属性 - self.image = pygame.image.load('images/alien.bmp') + self.image = pygame.image.load(get_resource_path('images/alien.png')) self.rect = self.image.get_rect() # 每个外星人最初都在屏幕左上角附近 diff --git a/alien_invasion.py b/alien_invasion.py index 610512a..f53718d 100644 --- a/alien_invasion.py +++ b/alien_invasion.py @@ -1,7 +1,7 @@ import pygame +import game_functions as gf from settings import Settings from ship import Ship -import game_functions as gf from pygame.sprite import Group from game_stats import GameStats from button import Button @@ -20,6 +20,7 @@ def run_game(): # 创建Play按钮 play_button = Button(ai_settings, screen, "Play") + continue_button = Button(ai_settings, screen, "Continue") # 创建一个用于存储游戏统计信息的实例, 并创建记分牌 stats = GameStats(ai_settings) @@ -43,7 +44,7 @@ def run_game(): ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, bullets, aliens) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) - gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button) + gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button, continue_button) run_game() diff --git a/alien_invasion.spec b/alien_invasion.spec new file mode 100644 index 0000000..559f83d --- /dev/null +++ b/alien_invasion.spec @@ -0,0 +1,45 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['alien_invasion.py'], + pathex=[], + binaries=[], + datas=[('images/alien.png', 'images'),('images/ship.bmp','images'),('high_score.json','.'),('music/Explo_Large.wav','music'),('music/Explo_Small.wav','music'),('music/Bullet_Whiz.wav','music'),('music/order_music.mp3','music')], + hiddenimports=['pygame.pkgdata'], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='alien_invasion', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon='alien.ico', +) diff --git a/all_music.py b/all_music.py index 07b96e6..e767d8c 100644 --- a/all_music.py +++ b/all_music.py @@ -1,25 +1,33 @@ import pygame +import os +import sys + + +def get_resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath("."), relative_path) def explosion_large(): # 外星人到达了屏幕底部或者撞到飞船的大爆炸声 - explosion_large = pygame.mixer.Sound("music/Explo_Large.wav") + explosion_large = pygame.mixer.Sound(get_resource_path("music/Explo_Large.wav")) explosion_large.play() def explosion_small(): # 增加子弹和外星人碰撞的小爆炸声 - explosion_small = pygame.mixer.Sound("music/Explo_Small.wav") + explosion_small = pygame.mixer.Sound(get_resource_path("music/Explo_Small.wav")) explosion_small.play() def bullet_whiz(): # 增加子弹射出的biu声 - bullet_whiz = pygame.mixer.Sound("music/Bullet_Whiz.wav") + bullet_whiz = pygame.mixer.Sound(get_resource_path("music/Bullet_Whiz.wav")) bullet_whiz.play() def bg_music(): # 游戏背景音乐(若游戏开始就一直播放) - pygame.mixer.music.load("music/order_music.mp3") + pygame.mixer.music.load(get_resource_path("music/order_music.mp3")) diff --git a/button.py b/button.py index 373e5b3..0cbddee 100644 --- a/button.py +++ b/button.py @@ -10,7 +10,7 @@ def __init__(self, ai_settings, screen, msg): # 设置按钮的尺寸和其他属性 self.width, self.height = 200, 50 - self.button_color = (0, 255, 0) + self.button_color = (33, 33, 33) self.text_color = (255, 255, 255) self.font = pygame.font.SysFont(None, 48) diff --git a/game_functions.py b/game_functions.py index 4de772f..2e9898d 100644 --- a/game_functions.py +++ b/game_functions.py @@ -5,13 +5,28 @@ from time import sleep import json import all_music as am +import os +import sys + + +def get_resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath("."), relative_path) def play_bg_music(): - # 检查音乐流播放,有返回True,没有返回False 如果没有音乐流则选择播放 + # 检查背景音乐流播放,有返回True,没有返回False 如果没有音乐流则选择播放 + """ 此方法同Sound方法一样!都是以流的方式呈现。一直播放需要使用while循环!""" + if not pygame.mixer.music.get_busy(): + pygame.mixer.music.play(loops=0,start=0) + + +def pause_bg_music(): + # 暂停背景音乐 """ 此方法同Sound方法一样!都是以流的方式呈现。一直播放需要使用while循环!""" if not pygame.mixer.music.get_busy(): - pygame.mixer.music.play() + pygame.mixer.music.pause() def check_high_score(stats, sb): @@ -140,14 +155,30 @@ def check_keydown_events(event, ai_settings, screen, ship, bullets, stats, sb, a ship.moving_left = True elif event.key == pygame.K_SPACE: fire_bullet(ai_settings, screen, ship, bullets) - elif event.key == pygame.K_q: - with open('high_score.json', 'w') as f_obj: + elif event.key == pygame.K_ESCAPE: + # 退出游戏 + with open(get_resource_path('high_score.json'), 'w') as f_obj: json.dump(stats.high_score, f_obj) + pygame.quit() sys.exit() - elif event.key == pygame.K_p: + elif event.key == pygame.K_r: + # 重新开始游戏 start_play_game(ai_settings, screen, stats, sb, ship, aliens, bullets) + stats.game_active = True + stats.continue_active = False elif event.key == pygame.K_w: - sleep(5) + # 暂停游戏 + # 显示光标 + pygame.mouse.set_visible(True) + stats.continue_active = True + stats.game_active = False + # pause_bg_music() + # sleep(3600) + elif event.key == pygame.K_c: + # 继续游戏 + pygame.mouse.set_visible(False) + stats.continue_active = False + stats.game_active = True def check_keyup_events(event, ship): @@ -162,7 +193,9 @@ def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, """ 在玩家单击Play按钮时开始新游戏""" button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y) if button_clicked: - start_play_game(ai_settings, screen, stats, sb, ship, aliens, bullets) + # start_play_game(ai_settings, screen, stats, sb, ship, aliens, bullets) + stats.game_active = True + stats.continue_active = False def start_play_game(ai_settings, screen, stats, sb, ship, aliens, bullets): @@ -195,8 +228,9 @@ def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bull """ 响应按键和鼠标事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: - with open('high_score.json', 'w') as f_obj: + with open(get_resource_path('high_score.json'), 'w') as f_obj: json.dump(stats.high_score, f_obj) + pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: check_keydown_events(event, ai_settings, screen, ship, bullets, stats, sb, aliens) @@ -207,7 +241,7 @@ def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bull check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y) -def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button): +def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button, continue_button): """ 更新屏幕上的图像,并切换到新屏幕""" # 每次循环时都会重绘屏幕 screen.fill(ai_settings.bg_color) @@ -219,8 +253,10 @@ def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_bu # 显示得分 sb.show_score() # 如果游戏处于非活动状态,就绘制Play按钮 - if stats.game_active is False: + if (stats.game_active is False) & (stats.continue_active is False): play_button.draw_button() + elif stats.continue_active is True: + continue_button.draw_button() # 让最近绘制的屏幕可见 pygame.display.flip() diff --git a/game_stats.py b/game_stats.py index 71e56d9..c8d548e 100644 --- a/game_stats.py +++ b/game_stats.py @@ -1,4 +1,12 @@ import json +import os +import sys + + +def get_resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath("."), relative_path) class GameStats(): @@ -9,12 +17,13 @@ def __init__(self, ai_settings): self.ai_settings = ai_settings self.reset_stats() - # 游戏刚启动时处于非活动状态 + # 游戏刚启动时处于非活动状态~ self.game_active = False + self.continue_active = False # 在如何情况下都不应重置最高得分 self.high_score = 0 - with open('high_score.json') as f_obj: + with open(get_resource_path('high_score.json')) as f_obj: self.high_score = json.load(f_obj) def reset_stats(self): diff --git a/high_score.json b/high_score.json index 0d5fe81..9178ae8 100644 --- a/high_score.json +++ b/high_score.json @@ -1 +1 @@ -36882 \ No newline at end of file +888000 \ No newline at end of file diff --git a/images/alien.bmp b/images/alien.bmp deleted file mode 100644 index dbe01a05de0f6f904459b92fd2d99193aea0bbad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10494 zcmdU!y-piJ5P+Qui3kc(kVi-hMFdd_paP*(JPSRdMNlJX;RUb|FF=tpT|$xqTi!fI zln*8ujb``u?)J{cL1$}jc6R35+1Ve9oln2t4W9qr^Zg`# @EJbF22U zKx_zYDi9RUI#eY>fzP-L&T&P_#Z7HBr{PrbY)Vzx7c PnVpi?<_?pVHVMc{o94>JZ-1xEPMl+=iMvO0pRuJD2Ch1m^upH#ow7W07wn60 z;i430AO^;>q$tj_1SNW$!@LGO2Q04z*h%18W(?? Vg|!bnHE%$3s#EGxGI0HC)NXI%S=H`tuRT3T_d zgRLqa7ad4Y?Y7_y3SRLEd_!P2 d(~zq~={}L&S@V%CGW2ZCV=_avrM@ zIR=&@aXVEPRA!v%E~}y#y9(IVb`xOPC2qpa)@aM_6|zgfygk~sdbPwL&ZN^Ej1QK- zFQdedvSox}7&;I7N;nCPkY57YB^Kyt{lo^M!7Kx5o05BogdlIloEb3Ok_SS>Hnmj& zx!ZFfB 9e^BRKMS!3^&vds6=R)EjLIgg#t47PM^NLxi> zfkh_giX;LWPKV4%3i)-oW`4C}awSR`W0qNfcwj{K%q1b}Rs?6@iVYip?YKA>s)moN z+i)vjbhN#Y=}40`a3uQbI`XPb4FyP?6LOyEt7&wpKAao^oarb{B*cZ&B-Hk`25v5D zonUYu?(txw$1`X{SebAb^TbtZ&88vWg}X_Z2(}xhodO7_5xv%@X2$J%@_XlKa%4TY zA3?KEroh-5aMdnNIu^I0?RIU)H3Qk*leKiU2G}PBgBj5Qs@V((lOY_o*eD*tOVw?X zR+SV0spAnmO|p<@F8u1@Wd&OUn(g9ZVAJN3%oUounY}HmtW8{riw90t71auE)2sCl z17KArZ?d~|NnSgX_M&vPZJCi9ViUAW(wJyGEIlk`IJF5R2N}QCV(*Xlb Myn z=q1pmnk+RWjLq`l`f4S~654J@$-OZqbQ(MGzVMQMSScF13wHA}E{V}rX@A1lT J0X@GI;3) L9{J~)(n;|LYGj&< diff --git a/images/alien.png b/images/alien.png new file mode 100644 index 0000000000000000000000000000000000000000..cedbd3b57d3112b948b202770e0f5657131d9bfd GIT binary patch literal 1057 zcmV++1m63JP) $y000B%Nkl EaZq3L5v`U3xE(8-~eRH>~1hK8gmUV|422ecKhve z(=!{Cgy@Is>vFwpPxJNl)$}R5lU;o )D{T|7=IY->O?Zcwi_w`W&^ChlQ`z^+I{`T1fEW1`GV49=yt?fO6URwV?+G49jvQ z0ne{P>0DrGXpxujsVWUCJ-tQJj7up*X$e@8K>#D7E+Xr UT9}X5s?0v)tsT6 (}f>ZMgqVm8zO z-uk_zH^-aB`ML;} 0N4*izCJ03ZWSnR8OprOu!H}$6HYTgFEm|y5u^_rY(r7AVo$27aJly~FaclF*4 zT9k)z1E5o0>a1CX^Jl14H3eN98XId`GQS?bImZfj>Mr_Tmn+$_1&k6ZSuuubG;b}< z9|Sb@yRlO|XEwNeAOD9%Q744r0|M2Pdg|!g*$@cj+#GP<5{+$*tfbKZC}tGI%p|ss zDS9)EgO{c#Sj&|@QhXfx;3L}J6Wt!hL_@S~=x!w7Qz0=X#`d+2$qN7^F@cNV(c pZ7EZ5k^%7I=2r#x(1SqN>IBPvt$b_qrA)IH!7-IIVz&so&m;kTV0DgsWm zYRoC0oQ<%OjlXDM2}MG^tmGIz=peA9BIcP8U*B5`+6!Fc6r3$1)H+~l^J#Bds(Qe) zhjDC1Y!x1T0`qD8UjUObHT>7*I{3&=V7gfIka*2FVPjfuwfHX9R^~^6c@4adz*MqY zoxG2u_ +}DegE*Hk4SA@09ZF*G9nMcYYj|H+(kPb4SZ|efP4Gh b(h%hz*YoziHJ_uU00000NkvXXu0mjf`ECAu literal 0 HcmV?d00001 diff --git a/images/final_result.PNG b/images/final_result.PNG deleted file mode 100644 index 78eaa8487955506007b2412bfacd58eeeb7ac2d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257957 zcmeFZX;_kL+cw;6Wm+p&S&q$?rZ%amDW$8-%z4TItxQc(DHTy1s4UH#GE++v=UE^J z91x_mG&N@tC%}0C6$cOnfsgL{dA@gh-n+GaecSuzd#`OnH!rxj&ht2rVc+-Tyo@q4 zF%a7;wRg*wEn tJ~=uiG3apZf |63^MO(xkZs4d*UG$Rc6( zm4aYDi?M0idW7%cYQnE9zpRVQ(%~B#Q#Zj<+MCL5b8J4Bqk EZx>d`cS1}!t2EB&Wkq_mgX zXm8h!8cVH4h%=l~0y>yML&IzH0D|Rw{z^d_XV}??=DTbddxYXZ<#kB1ir^fo@W&>V zNe07B!bMnpA1^B~X8?j5f>k&_zDI4_Z^v^TSYWb)5-(?ue%eScnM)I7KG&&7YaZ +{^9g`XQpbrrat(lh{7ltVy2C)cCQdG%SE zbJYGfnp9G2kN{;Z3P%z} aaPN-9hTkk@g>-bV^qoD3CCio?E9Nv?>>j z7h1Tl)Kz)d@`5mv#K=vJ_9MKT%7|r&Ddiv=ZQr!nt`0dZTt&FJ4=8g1gy^rl2(W6N zcJ7*d8tXqkFx`XM{@W2<2hKd-NfE510M5dPEn?-9^3S >*?d{HE%}NNS><4*GaI)YU-6F#}RvMz;8$MYnfo9JOF =omM+_GLHTnhOrd_eUELKVb zc#bSV?V8%|OnjxUTD0`-UOJ%KI7Kz1D;A2LyVElGZKayNJ{BajSFCucpv+{^C);So zmd0aKh*bWXEpG A8lC$e$FJ~gy}4^UIVhYz8k1Q zIjB{qJs(ErIYa@#5rTRctLBY~IH_f`8FRmf)K~e{mf4pmIIPE5WQKMAIdx7)+1Mk` z=5(f`-KdW0!dj 6Ro2JQ)1s@Jq-TnV$I@}>nS zl(N7n?J%!G9Ly;a2ZKu|xCVtwUM9P7&Nz$GiGny!c74dgK ht{DX`;`O|`~4`Bl1NMArsMIC*v4^a(S`Enn4 zwOVTjMK-`06Yw#=QwANhdh47v=tI?v8tHpDKvfJUxU-Wh^|-UjskN=WD-{BQjQ+Th z j@dWMPxsqA$d$Cd~dTI2j8Bee*;HYva`{9A6 zSx`bVgLMg4YVh2CKTcj7cVof;SEL>*C^>w0T_L?qP^u!&N$8Lbytz}Pu4L9L`3?%v zg9uGi1FanqJ2Id*(R8J^G^T0j^QK)ob#*&$j7jp}_@V0W3k~(|@F>|><$!2E_jyyQ z>{9Ni&^bsD)^{QMO*DIUWv(9UyUuL|E_Kq#d_wWEw6pbE!ylZb@U%P!tDA3ntX21x zlIkR!OpPusJ6YL{@)E+oX#Zx}t{a;HZ$P#&Ad!<_VAlE!_9_K?7b!v!?eyw M1AL;K_H+jtDRue(Zfkabel{l#F >nGABA!Flzqys8!Qbe(|{uX%< zV@TDL_PW#Kemuit0$ave&G1R`F(>{oQW66TfI4|I tcWah}s0dcIu*;w!%(OEmgaW?uV18Iiw>+gE<&YnpqDs5d zVwbK{VO$W`PE2}H#cABgp#AIsdoH{{gTk67v?|@-@z+RDqv}G%_hMklb9kpYxb~I| zz0|bdF2xorksTCyVDZ8G@b`_2`NDKddZXbHY@)B6wsvm8j^_a!V%q^VmoyJ8a7sJo z*UL?&1QrSbYF#a4F{{t)L+OLu$_@q(dT4 mq+@8drMo9;aVL OT;*s0GCEkdWE`JCEK<(s?iS1Ftp!poTDsxAED1rrv_e>RngTr2K|x^6Kya!k z+N=*00IU6_GYL82+{-%YY`)9~(|@8eW@oFY9@OMBLuIuYYmC|AUamB~b$N!lIOja8 zdXw7Aa-sG_A>%y+5ze!%wdXh)0(0V*U`_H!bdNQ<=Q>+fQ50vpwyJ%qN@1Y`1aN!k z(Awq>50Smussy!Ty-$X6L)o{cp0l}R#3Wk)+$)`y65t*r?_lGUN(=QzOfWf0TB>^v zx|~2}yMB|2EdIn^i8n4{^(cl6U0*=Je-qM$=fouf;gdyYyZDB?>(YdYDMJ%uzFI&) zekJqG+w$RxJII|r&;eer)+hGdfiOYuN7Y&ID}e<~l2x6Jo&!tD8Lcn8q}K8Z1nmH& z&2ql|x>)FwX=jKhNfi^siXKYhTJ8So3|RZ1dzI(S%bTr(u_vKcH8aCnnAJUG+*NA< zTM&r$kG43aIS^*Mt>)9Q5Y3QlULhJuylZCf|2z@z U3gbcWyG~ u3sc+v`Qgm1p_HzYPCkAYlnb`M%(Wb< @ELgH0Vmr!HovF_SAU4W{-eL^YVoIbB@f;4# zb80&l_^3DRQ0r=w5F_|G&T~}8x)5Cz7HoGw^d_xVumFMyUXSvf*vYp`&Da+TywY;< zi54`z`b)6y7k L;B7DPS{5wL-w^d018ERj{_63Hv8|d^1xY z 6;rXYX%KXLo8<@B-YSkz@hKd_YH&xoE<0HePQR zB0RVjR~06hl=P>sr!bwqLRnvH;Uv}sz^WU8p8FZ6Iy;mAp6k2`FmGATm>W%Y_6S~- zR@AC66HEYf&yusPZi`zrLk^gVi`b4lxTfh9qWYZO8WxuJrmjOlwJ|x(6=gBQT)C~K zeop8I9>MRlOKcBxbQncb BN z*+F*ik89jP0hphPqyWx6fUa)Y#z^a1PmkcxYyn7Hr}flbtj*`;1#nvtUqUe`l5n7b zUagHYNGB8CO_EsEqVY+)D1?Ni63%L^D!uWA>KxC~xm&(7)B%oPKZy^f)hUkfTxF?D z&GZ&Qs>-|o6@cc}PrGkkPi(%11P;3k>1B~#B>T@7KcO%B4ndEYic8z-bRl4$b%WB{ zR1|__4@DLz?FlUS>(F)v8>dqwla@=ey7*Qu0f&@#_$ziNC6TS1v}(3Y2eCK*lg?ZR zPUP&fQ`_@jlROZJ&ilfR+g$J*Mq$F36AW6rMp#K$D5d|WVW%Rvn+@@rnDO_Z&aetD zi{rHC`IwhfoXej9gr)SC)V+c=QUjRQIYY<-q;vE67PD{x!Y4iO?o2?K`7f-72N5zi zt%Z l}xqrHuifh{*IAJ23qUI7} 1HgiPhx zwHpa4IRTrMPGQrRVJjMdz8H@Q7A3f77sYZ;#>ax*0JIyZ$<9y^%rj_t=ai8r5}h2* z6gdv6pIW`JlcFRZp#W7v=W2(IV{Qh`-C;j1wPm0V1eZT;J{iP)5w-drp|_+%Ty+{; zjw(b={So*Z22fZhb7qMjmFYD=7Ra)}@rsy(fzW|a0iTzu7M$D^E1#2)6A9}3FqW$B z_vWy2i GO-5DjPlVt yw(%j_>LYUQv-4r=+FF 033tpWtLbN$wT`98zGp}5r4{aVJ-6>)}PK2^37C3MxGnr#fIs?x>` zl#kzB jlr(C_FH5M zNfD+Wc@K*{mGFal49wxc3?27mL@@s-<}vZ^$LML=k7eFaGQqIKFB!y{-zRpY#}tUI z?)kPHi_xm94=4>bjI7cvc|j)h4&n)B-TVw%!*hB1_;dNW2EP34Jc=> jSl_yHLR4JJn}zzQewVeDdV3 zExY^{T3Pj& 18B#ff$DAS)2vV4x5Zzla8q}*45tn)pS5s; z4FM-+UC1*MR_q}3Kf3S_i=<=R961;|=?hn$zb=BjS9{lc2xBF9u7i2VI Q?`MLblAC)Tu3`4!`mvgI7Fuh@0fun;B z->PH=ZXl`vH?%YeyOF~Qbqa@tSf3Qp$y#=idi>+<8CnmfEEN;z09FgUsfu3-7L!#s zixig?mY}}EI~T5=*wBG)BS8zjJ|5y<(|jK)KQ~c4PtunRG!?Hl__~sNAS8(U7AJOS z!MzyGy$S^=XU>P^hftJuPbgS+KP~=k$=Raz{lPXy{3-S?6tB+^2CZN lUTV6Hb _2`B}U=$#qA)fZL}?|2sl(i8$u?+{2v!kjHQa$ zY3LH8-lpT5y57_N>55mau{X~>*$>2k{p8be5>{)glUvI5dk=wag}kM>KJJlR>zCja zt==BSr}(`A$CA8nhsE*+#^1bA)Ri}MDW2C-bPxdPDBJFK@hCrpe~hAo4NC_6o1zqW zKt@HZ*fwQpbc2Wv^K*XAn(V4eVVyNodd>#$m-pLaV6U|Ny>j^Bu*WScnnS4s`? +qm zs12bBT{uHGEtvrkEaNp0HtfS ;xd6$4UtLi^APH({p;=O;Ut4 z+3K(q>h0c!m7CVP)tk{8wZYXX8Tq*EOK77_s4$8bOja+Rn`$LJjf}j!gkWM}tUKC^ zwmnC6Ha?wpN(&&xZWB+S4mSOWM*_~DT&6JNsjto6r;Ka}CWb9GF4k~wy?HFn7;4S_ zR%Q}rtSt9C6BUMvH^1y>82n2bI E-6AQOBTo)^JYRF3& zsB0>5YoA&Cnb^L(dVPj!AtO!I^LiWfN{xZL7?^Y?hYADcIEUEqr0__Sg`vkyr608* z*i8Ru#jL{dC%#jsB6}ENaP!j-CR)SfYCv4YWeKT3f~+oKb!eqOG_w5p$`OgSA4Ws{ z>tBLDvcCm(&XAkS%e`Yt@56r!%!JM|qAiSnIGgNnC*y(>fZwv8wHZwyt?y~X1P$9G zTkUdxe!r~dej~!IBR%({- vvcQHh#-@gn)~+(lklGMsYK^LJ?Uzb8$A(35+5o9RLg zFbfev)1U!9rzD?u&LnCM+7mo#)xDhZ#nKKdfg86?mC6 T(EPfR_;nh z+701?o{o2(9;$MQT2WW&d)d-R#Oi}EfdvU#^{faO!P+@z_zLMK1*n$iAQJ19l&>2r zRp{MVO*}R>yFB4PIndps468h=*lOwIRCM#^p@{V3hYmJhm ^@J z^uT|EytZr!{Hst{tep8Pl2bD?kzK)^2r?0CESiUTT&l~{@)(~yo_ZPjx%@KsF{|8U z2#bmm_X)K#SfSH@bhv4KpqglFRCP~dkeH|5!QS>HW037yU#?+#UtX{@#ydSfpk1nD zLR*Z8zj>JjqS}WJRawL*w-d7rUGTgiB^Yh4psyMZSQsV{{G)%9afGKbQI^8=B482t zLTS9Nm;3H?G;4^Cra9NI+wm4#nu%59VW~^A%Em|8pOQO*^tdZw*>nQ}GEJdAr!5j* z=vN2N-X28l&Hqldpk&J{LYF1%KW^ai?>^3~=M5EFrc` KgiRccz^|0T z@f;wY?8~u7nfl5IzOw93ZmLjt5n}S6DNITWS|~D-{M7|*LTN&Eh_FZ>O5uijJFnJU za=%vehrW{qK^I*DMQafA=ni*4%UGx2Rag8v%?QSyN@0#Gp=TEQMsuMUB(ctqV-j z&y#=k%ztzIyW>KJf?suUd-9^MWWs~-oR#=K<^uZh<4#q@;8sch`(#NbzXjgy+(8zK zXl6@7?!dPO>TE)Qn#_9*aAGYPU`EMifL2~JJmyC;JU3rcANO^+_th_0!Zwnqvr*21 zy8w34rm8u5P8{mcS7joc#8kWvDj}7+h_?aLC=~OeGB)?>rKL?Pcwk(ec zo+^N_MrT<37S-8s%e83E=g|_*64QmV^t1W}DL%}y&W0a79WQwA7RS$?zPpaN)N~CM zhosNV6@=wx@Q2w ;{3~-bu{&rXL8P;@#u<91 otvfVkHT)HmFprG zjQDnSHk%bToqTuWqiY@zZ(b*dtSTts&&dm@F#d)+=CQfW?EK l#O0gq{)zh&g`4Mi3B70GwGG0E-gF*Y5X7~#z-`+sh@Bh%RDyd5^r zEjX`swtnQEGnV6=gWTnc@K&gN0*5Q0!n>nY>oZ42AbFtQcaWb&CWsvV9X0%At-{^E z 0w{!e!H|L I<#B_0e!pVYb{#pBV4Ag$2F7i;q8x=`B{Fn)qP z3z~s<3OWuKom#G_VIOO1scA@k`}Easz6EpoIa_O#MXzqmOh`e$pZ(H(xpmO@dYdo% z@zV|!WoLpxuy}gUO{j5wzzjy+=i}?YA5WTaJliSaZz;RKnn8_J&SP_N3z2FbV`s$D zl5@5u+JYXBce(}zL&p8HgcID8p13FB;mu2^&u1Pv9{ <6fb^c=WVnT9;IZ9 zqV;_|q3nn^N;goo&Y`TbU@3#1U4HdvR0jUUp2<+c9l 7nYVA{jwL$UyfQyNr`I8ZCy_nEy-hvX9xM)EC2fVB1TO=zqB)bv&=TyJJ? zG;0x=7R4s-NoZ1*1PuPecnyW)4Wv&S AFz!v;ev8($fw^@1MRpq_F(3q~t7T z^|mgsgNbEgm?#n6Q+(ir4vdD=4H1wJoWMT~-*PU@vFT9%%NV7<{_`j`-h%^}$#QUV zSUD;dVi_5iL2R(zplLtIlVaIrD)d}pGGZ0z%h3Fn2j*6V`pN@zt(1 N55b+%G(;uYk~mJo$LNSZZ!0H;&nvl59>xJQKnv`9qfd6aTw*w$@R8x)C^A@ zplZN}qu6uqC`wVdfvEr5=Jzh;!L3#exkvuN)0CgHMRMy-QE@?+Ujm|44$~ifwR1%d z7OCr}%%+IPsJHFj+7s`kYfZSbPM_}WtLfAe%RuC~(gQpN2`@g!uqpUM$#aBe zzg>m#@ONLh+j}0ELN)7Q3#sBVI!K~4+jH`#quMOyx{%>#J6~z `s)8}`_9wtdg@j`&wv5`xgG&-eUnCzZUf=R47^ z8WF(SmIQCj97lM{l16*MoUMl?OSn{07cZM?ugUe!Rouk-*Z!perksa|uK)P^g@N4M z#=t!Ka~Ah;or`qPfXuBNO1}myMApT7%#Xx+b_Hi47#AFbcQZ1rLTp^jxU =+lbmSdYmrv)Qi41)_VnOpWuf-l}Kv0 zTjuE6d1`wVojE^H+Fln&Z}{GZ^_`+EeDVCLKANNOx4zK7^OrA(L!8dl7DseBd