From de45b5df6b048a8ab86a2030a31415b5015894c3 Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Fri, 22 Sep 2017 22:49:49 +0200 Subject: [PATCH] new sprites --- src/client/images/bigObjects.png | Bin 2743 -> 2928 bytes src/client/images/bigObjects.pyxel | Bin 21079 -> 21205 bytes src/client/images/bosses.png | Bin 1033 -> 1222 bytes src/client/images/bosses.pyxel | Bin 3781 -> 3979 bytes src/client/images/objects.png | Bin 4617 -> 4682 bytes src/client/images/objects.pyxel | Bin 36947 -> 37014 bytes src/client/images/tiles.png | Bin 3180 -> 3236 bytes src/client/images/tiles.pyxel | Bin 40127 -> 40191 bytes src/client/images/walls.png | Bin 5710 -> 5913 bytes src/client/images/walls.pyxel | Bin 53545 -> 53810 bytes src/client/js/canvas.js | 303 ++++++++++ src/client/js/components/social.js | 15 + src/client/js/renderer.js | 716 ++++++++++++++++++++++++ src/client/js/rendering/spriteShader.js | 111 ++++ src/mtx/skins/0001.png | Bin 0 -> 343 bytes src/mtx/skins/0001.pyxel | Bin 0 -> 3451 bytes src/mtx/skins/0010.pyxel | Bin 0 -> 3357 bytes 17 files changed, 1145 insertions(+) create mode 100644 src/client/js/canvas.js create mode 100644 src/client/js/components/social.js create mode 100644 src/client/js/renderer.js create mode 100644 src/client/js/rendering/spriteShader.js create mode 100644 src/mtx/skins/0001.png create mode 100644 src/mtx/skins/0001.pyxel create mode 100644 src/mtx/skins/0010.pyxel diff --git a/src/client/images/bigObjects.png b/src/client/images/bigObjects.png index 068552580ee94e296910c1df5a4f517ade586a3a..b989cd85c576721d9206be36a3ddb7e2e2749fe9 100644 GIT binary patch delta 2643 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 diff --git a/src/client/images/bigObjects.pyxel b/src/client/images/bigObjects.pyxel index 45aeea94494037d974d0e8f3e346392fc9b4248c..f0af4a9e8d1f1e793dcb88c7bdbeb04a503c958e 100644 GIT binary patch delta 6941 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 b{&Vi!FYu@L7*zl&0Pd4}GRT5I|K54 diff --git a/src/client/images/bosses.png b/src/client/images/bosses.png index 0041dd455efa03d2bec18e6e1a69583e0f10390d..7db0d026e10489dd3c49944f55b5634d1201f0b1 100644 GIT binary patch delta 1068 zcmV+{1k?M82*wGJBYy;qNkllpAWoDb~Zbc zgzq!&kKN3rOThN{_~EDB508HCj*gBxe+{<6ZEQ$^EW7 zc(V_GJ{LvcFT_@a|DUg4?z+Q+;p$(9L;g}sQUt%YD1ht*BKX-GC;}$k3q(=NH(%-$!bA%phYqcR zUk%4Dtrpuwul(`4*v6_)20p?c&*wIKgHQIJYxaBm^1-z(+WS|p_Q#E{rDkH`A68Qu z7QwB{pLOH4`r#aN7Qw02p5qopkYoH>1i3H5+A92Uu7B8ee_rXb7-FCFOh7Ilp1RUD z>;<9##^JApwrCObYyZcA%+Tj>D8rvu>lOu&!H;9cd1I>=m`VYh1hR%KCzFdfy7Tw& z+83U^+aEiMpthk1POj$j6hSSh>;)qDF)yfB|7^?teZIT7J6!dn5VG)E4zc(j)S%WO zP!0bd*MGn17CmMbKn6Cp@wkTgmA|@ELz)Yn<2dMb7!_fRpSezi zK@@5HjM1Lo+3(wnd#@>gDTF`58cUP2Ca-5bcYmJv{&;PDT`hufk;UV^FMq$#IkK0k z%beqPe>3#)br#z)Jwb#&e!d8Q{2sLkBxnN83;4X@uYn)WA;v|p$Rs-pAm7pURS0yucFPfmPJtaFY;zs4uNtWFzb7ASu}sIr4|ZKK5p^wnYV`) z^NrX_%>;{}MflH}{N~Ul_bplkIT@Z+05$xrT)A_ji?;XR-mr}(F%ywPg*rj4t2M2P zVBChDV2+_se%9x_@UPg4(OZ zT*CVR000000000009&fntr1~kgTKtJ5n*GsxHTedoR+sngpJhl)`+n7R()$k*og3F z0kpm~BCM@d-x?9t+A4322peHlw?>4Gu*zE_!rF^5eJz3<;{PZB0000psF{&q8KYryI8 z9z9zIpdEsCNc;x)$B&oioBDIT9#e~<3;)r^mr?Kh>A|^~ zUpp7Q8G!8J_kZ^8jan3Wo%_Q~LCC4YP=#NOU%Rv#wyr&YJTER|*Cz`;ia+kp%Nz}! zZCw-ux)=X=H)X&O?5@9P+I#imW6T(WBfC8ZEkclU{2GG1?cwI80MMa#KHNS$($fw& z3Pb?f#b1NgHw2@-|DTtdEc%=dW${Nd3eahK5=B*uEPof1eeB=)J$~-x3wKAa9U-V~ z9D>8%e3lT@K;{{NH!pHGN+*1CRw9mvOxo@%3NLktt25 zV;mHEokqnd5dY@75RS(g1vpVH@LXW_E&kl`sk=Tk0J#pRBTXE0;Kx~LzpGhIe z+k1!LaK|dQJ?lu20ccORvhW3fsl97{65Re8!GDk;sJHj|Ff6A)xel20nA{f4|Ciq` zokK8G!Ax5G=F}x`>l=bx3{MI`Eq>_StG0K6>TbzdTu#5lz002ovPDHLkV1n}a Buvq{A diff --git a/src/client/images/bosses.pyxel b/src/client/images/bosses.pyxel index 0e415fcc2e7d4e00afc965e737da7fab8e743017..d3015eb468cf6710627e01e1b51ba879cfc86f8c 100644 GIT binary patch delta 2400 zcmZuzc{~(a8y;JhF(XUX5F+AQ6Yki`HnwOeL`L?Jj5ULgQL+!CWEuNXmKc((g&5av zWXlx>LxgNG*>%UQ?|#3&-#zEN?|I*|Jm>uLKELM=!FXY`xiK9*7XZM-1V9vBHh$ui zso+Zo05q`z0Mr3+Mmp)<@xLSM;fM6fPBTSj$)DC<-#a5sy#7d|wzZ)M&o6~2lz@e3 zzhF(5xd@a#Cw$}ScYA>^@|o?K5^st_({VvUGOohln`O`%ihe@C79VoF|P=GHz`fB8iEG`tEiCbhF3JK6ywz+ctB{AkWaW&0&^b71eB4S z+3qxD&u08>U}vI2*i2>l7QE!9N=sc+MMdx^c*0LPasS!fMv@Gc*Ayl?raO15BNuBMHIJ}36 z()Lhn+uHUJE(K5UirJIzDJ?^|;4j!I0wlOi+{$4Yimx2fefTXLUOFr|0lUpT*Blqo zSvrjl3Ug zv}em*xFIqqVX@e2{n&V3FI&zMA%!-gE*l5f&9xvo571^ zlEaYAY-E9Uiu?4tJzqc)htDFAqeMHDetP<949hB;>NHHr++C}6Z-LeN;WFbi9MI-t zKRY)eM<&+A040-nRN;o=P`l!-GeiHmuF-eUah5)ql)m#@o};9kUvrW+8j~x%a9}Li zS{$!7joLp)q_d+(am*mXd&ktUbXoMOAaACPa5=W!um8BX@JgoLe{&Kv)6QdoZP?y) zUozZ{IbegBpcJNSbC4hTzPQdY|D$bWN3#CWs2n`*IJ$q{e#7nltOr_Z;2OODKE6-6 z)v1TQu5gg;HVE>-UN@)nWfAFE5tU&C4y+u#SGwL`v&***S>Y1fjj=MRTxWYGvTmZI zl^WHolyGRxkAn2KN;4M*+)ix_+4Q9yI2^Z0v^wxTo7lIlk=`OXJQLEMXzjnT%l2!D zYJ6nOxkC>CbWn|jTB4qJf?Ry%Wxc)J`me93OfUkDx|#c(?QOX$YjN_gNfb%4TK7#X zSzZzQVFlw=9w+7c2&Hm0EbzTYBQ|c z?fHzcOi7}N49waK^ApvCw0vYS6)~6_P)2_KD7p_e*EtN|aIk=sYj)^w%hM^Kz{vOiijaoccefJyDU+^B3u)m2mwlk*4* zE|=ZHcFuxiMJ|zb1#kLCLYpWDkl!U*;Mf_b7~8<~7+EU|KIS)KW<9#L%r|H{*+tmR z!4r+n2Ap_1#hNJVinc1)mX#1X%Hp%^`V+CdeD=zR>~ELPjh5vc@W+HX>IS*XNlvuN96lz7PQq5T=)U^1T^OjZd=H<1G-L+I@ zl2$Et+z^$!;3|MEgT1L=wVpCfg%Y06z8SBtoc+5=fyCA(x5ck+%`GrlER?^w2+~v z{B@1Txdv<(7wmzEizk{dvSGL*3;=wN>^XgW|8_A%P0fFHlyA6GZw?!!u!)3h@m&GEZ%WvtU+H`d=wU~)BDE@Yqe*2 z;uiJJeaG+g2mwP$as2%wg3p&KrTmS$5T%`{qxkxp7RsM|MNEh=r2at(M;!T?2gwkYoi$S~p_E z_@u^^C{avRcx_QMO)lsl?SLCgV44Zy?jxU?=d)A0==ik2wSTvsBn4zWbc(&gDu2i| zBp!Q5;C`&D2zqUA;<(Lo$Iu;buGNI>ZD35rFU)!=BnuQv$&^XOJSNSEi!;v_+qUzJ z!t2t8!4>wJ+$yz44k>KEvuAqGvP4IW$ORZz4?w(lTs!Me^JYU=&2uvkhH_7pB`JP& zd~YFH3M$TOV)G(~7QBp)4Cb{c09Yk)Yh?{zag_crh7Rsdy(UZomTYVnQ|gD-&R1B% zI97xn@yJ2-pJPDz1?1bU10^aeD~N2s)8Bs5tZo*|IQP;G`V;k#EX1_=cTmmA459fE!B|RvM&E&#X_)^J8OfR;1>uwI|M`qc zX+K+5aw3TD2XGmPUrn6pC)p{Ske#_P4J{Yof6Apmxfx5OUhJnD^M4WkoI?4V5zye<8 delta 2185 zcmZvdeLT}^AIFDv+Q`F6RAft%XA)YNR13`@O!`>-GJ7Ue`bG>zfCEY6KiZ ztARIxKoAH>RN-~hJ|ej?K@9|I-v9!wZcrFL)FU`C*fu%=A4jEh#R>N59FQ)mqa=5A zoOhbaN@D9&ngk(1cikZ7o*VTvtk7ANyDZd|O9gwj=96Cup0J;gCi;{cjn<0Q%dA6BCNh#CcRKL@aqfB ziXh|ETMpE!wDjaDFKjQGF{=L*F6Jb56C>p<=Ir7I^SCO`@Hh~#`6|6b$ufVyIPDp< zIo!o?k<1^@VYbK&iyhy1i)RYn1rPru;7t%-+D-_Y6H2Lt-Hr-hQ~3M-RQDz(rY04c z>y|9r-Jia(NYMG8u)Pd@RzDF;88#bgHo=^?0bL2ScMs`Lvwf2*%K23IW2Ro7PEgdr z5H!5CaN|e48otN-00#wIsyaYkAc zV&F!CI{R!)FJzuw;8e7$w7b}o7sOCSh&G-(Ub^;|^--eF`Z|D2Yv1y>2 zH|556>_BA4TJ;Yjl=IRcn%;>g8f~>=14lY{$uhR1680_OI5ZcD-?4D&1*E_~7598Q zZLkO;0s8h;;3;$LsgK53&*t1Y>&KrUybkf6{PX%EFU?98FtzJX<7#@LnUJj0wV|LoU>T@`K za`Pd8imexAqa{+AsU)JP5%p%4b+)JQ`<9&q!RyAU+0OV5@}&lc3FG7z zqN=nXNc8Ju=IT3YactU=v{+neHg2veW*&!f3wwJ&V&nZJ?^T^YO=RcYjVto(aMWCm zE6J+{jC|yEZ<*a^KF>7oQY4W$p%^pi5g}Qr2gB8_q)AJDz+aqhF_MS2UFEZr8p5J- zggJ;C*ljCnUouJ`civL6$|w{J0;#VudM-FEJbpL%C}bzFc)2<+^vF{>D@7J@ZD($s zTQhgW74h#b59T#yOmvTrXKeTAm8kW}>)G z^|mVIrq9nv)OxtnBLn41g@42yYR1@PkC~mjyDMRNnGYzZVZscZkD>k}Lq7EtpE8`S zJtoD%LSU1^{bItx!$(5ispW+>Qbm26$-X&XMSJrw=AuxaO~Sn=_&Qi0skHU4JD8R9 zGCM?9rK-;I=5>_fI|<9>kp+nk~tpsY{f{F9|GwBpZ+Me}%RdWDCjWM%)% zcxuR`DD(Bg=)y=)WfPrAXT9X1*$hrBFI@S4Icn=@T1)*7>((bq|Ke(xPAW4Fct)SD zC6Nb@I9f=X!g)z0$CkYwL=6hE2XEP90|MewdN|@&;rlggH)jQTjhEKmW?GLf0l>;< zj7x`jjz&yGh=0C;F`Y0NqMPh*kqs!yo06nu@s!qD%1P`^D{kV#nE}U3R$9JJ;J`^7 zVnj||!N~dFRyTHO+*=v8>xc|A#P=gFolH*`ovA0`#s__V`Fy&}+QiR^H~X)wPGw{( zSbiPd5D1Xyvwemk`NCz_P6Q^vKHHvF6vw z0v=3vi^DPtFYg?xi^nHZUr+(R^=9UbH!F(jOPu&@D#3x>-)xdBQ+{4bPoQcZ(vo{9 z(vlB5DH{`yZy>o-evBK*bFE<&A=tgHhIfnW6&2ZCBAt9iZ9Z>hA?AJq&tfdOQ_jzI zU{vz6e$CiBsswthSst0!RK6)Qr9)2bPdqv!R66@z<}#qxDKVJn=8Qf|)%e!*^ zT!D?UeF9<9eODEF8NhIT%LvKlVJPh!>D08Ofn)I#R2%dqsbmKT9lSPH$rF$de-unU z)K%rrYKzAGzpAGj_NqYtp1x$TmOXOq_Wzu(qW;&SuG0S}^|t5ZB9Ea}R5yYCH^a#n zv&f|ATU^(C?m4kZoK@w(YC!*M@yDqH0f7>u&V}#(s?C^|!HIRNg0&9&uXWUM p!;P|3K%h&j@ujiH>c6xm+w(OU*+<(z^@9dETHEj&3(d8M{0?YeBF6v# diff --git a/src/client/images/objects.png b/src/client/images/objects.png index 0af5ba01279adf16bc98aea5a3201e3f2622d511..0440978db66cff9209785d04dd8ac598e87e0f38 100644 GIT binary patch delta 4270 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 Q2LJ#707*qoM6N<$f=*{!BLDyZ delta 4205 zcmV-z5R&i8B#9)DBYzRlNkl@U17X}xu zf+HAkp-5Kw2eL_s#4NMXg$SantO9YPE+Qzn5Z$;GH$oI-pnc!Y`?TNw_BmCz`@Np& znRyqATYanVy>-5I>YP)jPSw43tvLSs^DnIO+Usxpcva>7o_|05=*e}e?!S}AzdrnM zwdC67SpDPCEh0qld%yi)^ILfb0pj0&@riY+K+p?ypHja3^*7#Hz4!hHTS?cJmh1T9 zKUb?NujAE!KeK+PCtYg+P~`;ze@=n{1VZ$Gh$lG!e|qTI%`>=H*C_wW3*TPdy!rB0 z(lsyl|M1%hzJKx4zpixlJmp{d%~LA}L3v%fGyrIQx&V3p|Fcg#wI*GRtD69{W0i6)!x{&97<-G+Uh?Y+RY4J=h1JvROS>=%d zygTbh9a^=qv-I=uY4rkkneRYEq3wn;?&F{Wk=9fHQl|enx<-CF}V^n_QwU>4T z7+sdkUW5UHu2E4J zq&ll?qpEK{{n2yI&TtXL`56#8kT%jeg#%Wc&VQ~EbQV`Q!PVKHE&Yo=_SP5CdiJ9) zJ-bdK5H7&V)HUiS;`M%KaRIO)RA8I~v)B&kq_>F7)&~fkv(@1QetYYuwtz4_3*t#w zZV*f5U6NDJY+V33*bb-$F$n;9XLp^eE>Ni)u8HmSEGJ$B&>d7!l{@hefSMi|S_jzy zd4FJFfeXlb~B-<$=aa{&YhARp1?U@O7CXYGK!RPEDWTPYpnK$sa1 z&WhOrGlvPS`uDdVTqoBOmvu;p1AyB!Tf@m5Unc>&2HQE3K4?NHI)2+qwxj4 zfQma+C&?3~9XT;`Y0b*rHt@U)p-Kv;{XuzUkIV*H$zj?0sAkmk4i|KW(2{ajm7ZTJ zh26^Ye8v7%H*ogPZh)!qq0`hWi^ zsXk|YILW)hP_@m*%vlb5j{aXg6T9BoJKgYk|Dml{){lpI->qIyRcfi48rcamEix-# zGBL9rU7n8^ckF;{&3(Nk*yQw4HK>pX!Pg}fFlbs&+(SM_lD3_LZKFKVr@;iOZ^Hm>AAdsq+p2daLmD43q zNf7AQX60^5yT8EI=&XG2E|69ty4Cfp&UB5g+OwJ7&{H}P`MXE#biD;upXpQ*taH+bJh6L??ua`z%t<#|8$itY>$oa=vdmecfmxNq0c3>OlDpeeUY&rot*Awy%>x1r-4clUD^P0^d=Sf(0-J zcK{eU6*rT(1t2y)xB(V0bggOt%D1|q8!m3xWEa4cL{g`z>0LnAd}1O!J|0T5v9DSRN0SZ)A2MTvxnYXBOYE||zGC&1@Z?pdhU&^s&3AF{95W+^zBr0O z*vAngj&h+lihdg!c}VfglV1iQ0<;5@f(9l5JCmsfCjkqS(FRt3YIzZ*enfx*`Q(Jr ztk3@?^jlk@>^lPO{o3R7w`YE_74Verr7myYcw|*QBb_>x=5S51HRRXBb7GpJy_5n5W3)nk&z|B0ih}v;T{-Ssmab`q}GP;&wlzl>$GJ{ zU`iq--Lzb4i8%%7YXjyx4`v~ zaw^Cl*D~PD@W6id5SaCJ_E{MKC;oo>vTxEFT#BiOY48p z`=`D>-xr{h6Qgx`IVF}LGWgAAisaKZ0}kpIS=tFm8&wZ?amM+vdgp>gy8sDMv{AMvE6Soz(BjC4)$1B_F`fAnX*`Xn@ z&hM`Nyvl1Gu$~vO^4Q*Z?Ry)ybtMEm7K1{rTD(2*LqD*K*RNB7DmpDPj=dF5SmqjpuDZmdW*)B~0WJlMZFvMaz{a8>>;jggTJ(COEi4(`gS5FkLjS5N}ayJrW0 z6Yd(Ysr+LH8EQoaMB3ZT+|fBo<)YvV*o`Re`-fZ2Y6yhGRY{0e|kUoRK?as~iz{oGK|2}Q#5&1P}ncas8V; z2wC|hU0`;fJyUF(R0_>qw1-FM|^an^;Ff^c;l+5)-X=P{fXoeG2P zeI%M)!GFt~?%emSfAu8$y3>^+Si%G1$*=A7CMwL!(m=`IBAouMGMzgxrsMho5GHL~ zf2Ur?NURbPZ~%SJIY2}rAU)h(X8`aealS5LsU1MeX%I#Ku3B@X9*1)RGa=)II}iYn zn;Me4;Iq^&jF0ygRt_C4CV&J$G$nqtA?te@enC>Jvu;J45?#o}az| zo|6Vt{`TQ5M0XpaVa7WkmCJu8?kNqM4ulQ>#t3i-@d6$aOY13Ruw;0=R>;|qLN(;&&vH9 z0#!LK?TW>nz^bnK?0g2%@NF0P-47m^_N}h}>6#=z<&yGMD}M61&uunNt;+G|kLpp? z_4@hFQGU+*bWaJu_45T1LTCvHU8QpSjEX?tH8u&zf3Hw-w8M zs%t*hhhW%OzdZ`P1Lqh3?Dgz!YxfAZ3 zS`@nFBB%9SNAF`y0D@0*SDsv2`4IWxgeL&G1yD7EJ=}HHRTz?bA65eZj}dYJsEh+p zlf@1Xe_S-y9>SA&ceJK0K8i`K*gHS1dDr;*9fW;}cMaiez7GeT{4o=_N%*A$P<=Y5 zJNVDmSDp&NwvVubox3UVB)kjLIar4$K@|{wjsJ45`gN+BQQScG-Pxw95bJ$^pZI}A z7M$-1SZ#{tOW~Avi%-O+v9T0@988f?&7~pae;nYtzq1jl_=Syt!WLl6-&GV}05$^m ziWAoR4V()(@)v2Cip9I_eY{&#k!)4j4hQ+%z-XLZ&9Fc;mfk)9Ea?L7=x8T6_OJ;~ z)?0j8pToPF|G!@k1n)iq_?|eBH_S(HuH;a=FA@do{kY%%;I2Y2zfnB8KKG3 zK5~5AQ^%4mFtBEi214i4%j<{w{!ZfP219s$E0^_Bf552<*d516MN9@5R72_ns}p1= zyL+{Ux*Z4^Wl>FT__gwxadq6mgC#JYa!Ji?V_7yjInF zS_;~u0)Qc-yom2SHUvO+1g2ML{;SJ)4jg$^EdN6_i^UE=ltIDo^#&i-tjq&Fd>}~qoG1XOpid2ks<7}1y!a7&R^Og zK_EH0&&aXrkuH}Ij^;ggMIB2b%&Eev@Hue^g$g8FUEd36k3HJQ|wDS9K%dZ z|Am(!U%!Y_$w`ZNXMQlgf^P1@z`Svb<*4m)0&!X zPmF*SCRjCfeS`n-k5u{JFQ%z`GU*G|`aGAuoEbgmqJ)qcC*A*#qOTVgHT;gVC*rW5ay$LT(+w9cb0B9#x{+}yssf4(Nn}7mzQ^Nb)l3f4=`*JJ zU+tcgTu=0hw9+eXQ%Ur)IwjhJ@@(x194N?l`s!w%>ZMoCx1qIUje48B-2FAM%DYv_ z3S?O^U0My*(u+J9?{%K8MIQ?a%Q6;-zTD|BJ5U9%aBaBtYUI5EmFu`=-{|dFrI?<+ zJ&UQZpT}$#ti(F>mwwUp&}^&6HEiKOb7W6&IW6y#O^?q+D74iFstvDSmIF_flty$J+Z6TpQEF$p&%K2@(EI zKM(5nE@ml2P}9{3k&B%VJfhya+)80vW_mRFPW*3Eo>fIwMOLMp(M6+|M$Se{M&w4L z^9<;sihC`C-18<*>tWS;1GR9|he4Zp6PNYJ)jb2X6Y~OSOi|@MTw6-Tz0vv5YL5RC zsL&1-_nHQidjDuvO0p!Id@!`VeN9s`@zU4r^;NGZt(kt^TGb}wyr^s5n?lRUo7->c z^O!_U)T#J7@A*#4eH%8($-QUMBz(Ed(@M1X&!e6#Qt#pp^|wtvE?Yh4SZGu*dNii} zl*T(3>%NMALickPWFJ|WJ@)qIAzFpQO_n?n$AVb-lg^S8G4jOF1r?h~C_j#FA`~${ z5q*F0H9x^A!6PJL`pD^@&q$1WK1rRU&Jx!^(#FM+k<0tLa-O3-tlUO?U#3x+NW?X& zIiFz6Kh|G5{TA6LDI{a__peBxlpaF`$OX7xuyid#$_J2ir9HL$h-=2RCS*tlSbqFO z6+qIO_Vm_ABx7kDCBPn#5bGy(F(!_ZIMy%g7BYsCT|&Y47Lt>ZjGaiS6$@5WCLwH< z(z-~iND}+6YICq&45flH2~ljLVyl_d#S@&2l!_#5XD|WMMg03(0ti~ovTpGs86)B- zNv^1d?6O{`rP2)}p~z@d?lP0Utj`JXgphEjuwh%hR_Wvd;xigE^nm96qZBV2m3z&k z1@$>k^1LJAu9Kt8XjJO@E_GR$6JQD<;gAm?>iV8#>4*fL&{I*%1%N(gr!bxtGF3K? zNX92|l+?8(oOQP*KibK%8B;Ug3P{Wz8#zfo8Yd-8?4*oj@~1~L2g=5bb_6(*X$^SL zQcKsIz~17V7bgow)?s^R4OwXMw_>qFGU%xYFZe8*zp>KvJt@{y|bK) zB#C@9n%@8u<{PLb$s4!hl>TvdZRxdu ze^E;~1tZmVWo)oaD=%-P771?>eZb+`&$-Rxnr#hw=UcdG>-sr)A7~vT0o@(U&G|#u zj~yfVjQ)9^H-)UKV#w8)*?m16l^Q(%VePj!ak#nXr#e$3anIdM3k~KgS2KMlEmKO} zb|mia-d+2C7?Y7x_srbK$Fk00X(jQ(lT@z93x2B6Y_%z=Y@ddi1%Q;_RsJo5->gec zMVVgv^}2>XJbY^xv47W8S#tfLeguI~#$M#uUDMXw>zIcXjDzPaSi{M%RQ-cFj*3Hd8tJS(T_53&Hw ziW->|0TgkVSw0Zqm{tSuTQ|e(tNcsL|MZ9<+DoIQ^ zLn`f2$Y(V&%i?h>b0wEFb>J+{RMKh9P>!3k$i_s-c&qVdv>mvF=~X;~aFinTMH9>~ ziZ7ksN_9zakvcoH{yUP-E^q8&?!B^}xA#{x^jX-5L|Nb6W$paac8@}e_IxVwr_o17 zB+pvtUbe9jxud^EisG#*J)*a3^C?Uq;~urNo78bfL2Z&r=cCGPH_Ht z_6n7yaActUq?|{&94|)Xfs!L?V(?MvI<-ZAnD^a)qZFP|qbkE5mGAjH>bL?tGuk~4 z8NYe9{l|%rh%YPeK8m(czrzp_u?4?2a&gm3ab6%ClvZgvv^~K?n@oX}LTrTak{TXfyJAE7 zT^E&TZE{U_XdEfrMXm6(UFDRITEG_3%W=(qWkaeTPtw|E6u1g7~?l14u9$G!Pz7ZSxXl`oBtJ&R*^p;KGYJwT~`D#2m%loHB<+qiS34ymi zlZtR1?~1sr#LJPg*=J+ei_9(B9Eq1e`n)07Fuf{ix2UY@=K1X^CR!rH$Y5xLz2tct z%gTjLJ#T(LsXSfJW5;#%)Dor6NT-=5#aDCA?GWl^mMnD}BManQ^JlLoPXor4TgPGp zwC=c$yZV)~efq={pUCv_a1BrD^mTOl)2pqW)|&I{_M_t|o%V4-x`GCV650Wm?0?lo zp8ZufKRz#?*S74l14_JX!kA7mc?x-ZYj)0G8}}M^-K^@8i=Fq?@Ag|F+8pTaR=tms zu`P(7YU;9no>EeI*vwf=zNSMtH>kvm2F#=6B$U(uyD9leXb>kv7|xP zn{?W~ey#|xo9Zk9DY#9=K|lktQ|n@EJm{YK$oUd(j0JW*@7z7JVt6n8Cn@1vZQqZT z@*GU@@n3NZPk9}N+;3@LVM`W`pKw$y78>hma=DQ{LqZuW_S#{n=6d18FGi!})l?qL zc$cJo3TEnUQmS}4=kTAzBFu@*U-=d+gJgki=;@}ph}+H#9!TQuKE}6+&+Fo8FcwWC zh4)^hNh4hwDcIOl0*Pc$ysxkDztjSg-zpYRjihdjm6uy}CN#v!DOXulemUYoD|$&x z&)G4=l8%PVl~nS}459Rs7(wrC-fYaMQk zC5fJ2+3v1bI~H7LXWn*R^31%Il{Div{J^%+pi{Q`9FCW49=EeNTqhr6u!|J zMy4+-8lFC%3|(CiZm5i*pcOmCf*|hMGJnjtm8T{lJ>V79*y|@ z`N_)PKmD`hB0_@@=|klEcHCpY1l3r$ddDx05nU1T`zc}eH{%B3#v)@za&%L1puT|fynQ5dhuN&FVin(O?;|R+nEZ8hZ|^!jDGm;W z*(GOX9_d@ZT2`(36RbtO{d=W+b}f5{Ua2`V|3Go+-8K<>!m7rf8&`B9S7%U>%DG4~ zvkKi+HSr4Upw+>&`&dqrdEA#+-x6A1qp4g7>A9XuL@+$^;rMPzxoUK3w1lI=%o$Sa zdGVM<`Vxhi1zKt{P9nL>b+Y3dA8sg~wdZ!c+OR+utyk8)+MU;4A}ec_JlwnO0rrTR zUE#YiUR=A_heq4aDwE~;AmUfq*Q8oA)#S5CEH>*ojJXLg-$ynGl~CC)xDV$i93>DH zqn%&-D)wtC`~HHY;{(FG?d$L3dIkI0i(dIaz;3suhrW4PG;TQ(h$9t$LTZ$%P24CWr5E3XaaMh!Mtp!1P=y?;vAiVN~AltW&2 zf4zT{@70;GHue4%JUv#u~-_Bui{*LoA)wQ)+s&}L#&8 zACw6n>X57MlD!71qWUWx=^`6zd-XzF*XVPK^M^)egv$;&*LP|QpBH5y>EBYkT6=kn^x6%nE2E$wq9QNkKt`mwAr<{tA~)+`pS0HY9k)# zpJD%w*i3Qp4Uv=btf=ikd{-IuGJdTk=9};t8Mb5mYC`b}^(65fnKy^gNCZ+y;4DGI zk)i?$-pDVX=rY4*C7bEo(Tqef3LQCtEisY zNwKRNA`73doI&(-9#LE(wC(V@! zNA+n%M>%uG#Sm_@+ntojB`9sCaaI4TFGJPWRgA&9WPyer5#!qI_qf zb4yOqr5Qog&(pQW>a#qfi!@ca?cO`XPd$CCNv9spv3JLFEE028e)MzSC65e<@f1xQ z`mloe-M19*)Y~hqxreAiR;D0!`~_#9Y#?j;QDVB;@3coS%JxQgkE%=#rjMkU_6)CR z8ZQ@15I5Cr&S`!>C7gpW>n^D-m`*%v+M0fR_IY}q-VNdo&ZzG1Zo>pJgq?Lqb^J6? zd4!X7!idhs$^}BktEo-xHr-2oDwyAT-<|*PV}O?0#_6>+r4Rko4VI|&SXoboyU((` zcpspRpWK#+J9WNMQjnx#lm2_k6B#PzrXab%-)O>k3&Eb$N2U)9$vx+pQ5zZ88)+F~TW}oNtv#$cWM2KiQXT-Az zA`S4wF&fN(_46x%9ELkT;eod~56&jB`ISbbp$upb1PPC#!#hsnq);iu!QQ9=SDdtBnd-t*bxl zWA@K$M;qk%Iqs3OXJcp2^+F3d-R%9X=(u(;7+dwWKbB?qZhfXY`8Cs6} zMmE%r2G02qP0B=V7hJy9GCH^>F?2ppu`KVWZ-AG*+2xMHJNigK#eoW;QspZq+IKjL zL9p@Z>M_$VlfMclb{Bex8mko$!$(P%f;PxH;+d@1p~;rs*2m>qg)%K-*v{rFUyuY@W-zsGKsScx02R%*ZCfW8dQC)PtvXdxcR!5RZt%o z5ZoB*iM6lqNeY0&DO527sqd7_P&AHglMnU%x~`b89usFOnROK~Z6v=qTu9R}cxz2S zj`aI41PS2ba%76(f!cbnVMeXD&Z8d-l)>HpIdr~U+TJTh-RirfQcSr9HX7rMiqp)y zM?N&V`x~=yF~qA84;S1g(_qPtU2l!uewgHdX-`BHU!w2Kk&Y`HJ|>=8GvebEH&Zn3 zE}m%Td68eH(+%k+t6Ho$&p#*I#iiM3-_K+c^G^2NRPP4${NkJtYs|QFrA6+7_Iw(P zqtsO?17}oVi!Gm4@-leB!%mQoKi{5Gh9ZnftQyb9MwRjYc^Y zV&x12@|0K1uRb5e+2^Z05u8tm^7y3fBqQ%;I5qo;c}y6XRC%;LZr~&>bFLZcVf&)Z zvP&d*$ztlHODie%#RWo1UQMo0#>^l476de9BqhfEasXO020_9KV+14w0uLa8@#GUo zs66=!5}cWmAc5{wIwX{xDuM(n<|atsXMurLEG1Bj6EYDJC|MIAA)B=x60Ay<2d=0_C|-=+>h>;VkDnsAY*09+y8?Fw{cD z-2e$)+@+8Z%JT*iw9i*T0v+$(0C`)W77Sk*B#7`ALc%P693%u>XoUogi}1LPUP^&l zUR|n&1lP;(xWolOsO7UjBqZDt41|QAg0QPzLa@$JVK|t{!m*IfB@vjjCDI19w2D50 zggas(kgy~c4GH(f;e4@Qc>%S2yAlrxP7?W$fRxOIgb$L%kl-&>0|_$HsgN)(4RZoz zU=QhK;jurLg`+AY=LIR3%XvbAfIM6qQ}Pd?mOzD@kTAO^XkCS!U$_e2N>gG0Z4^-0ix2%gl?5;!DH6YhSNNv4Ric;;0bmd1t%;Ml?GW| z)rGBo=)x_*da#E`efU<5eg>p`(4CWpaO67-pFu62Mp=+>+87qv zjLV^x`zAS%z;F5-626jVf_ z!WtKFucZH9W6sp$kq4IKeE_TmYC4~Q0%GS32+yB{`niOUVj^>T%NjLQ9W`Q(> z@oAW^rZB`{p|J2hj20gS)VYg;*+D;xXU3IizyZuUNZEDrM+%q5qAz?%0W#uJWzWypew@-WAKKZs`C14Ts1#9fFa?5?eNc& zAv7RTx2J+P6~Izxd;%7mcmN#&UT}v!RC5PJ6nLSYF5ykZq;y~buHFvT+$@;BhpEG2 zO8H<6-mojnIID+YF}O8jf7tCoIuF%`Y4LfTsy~|T90(b4lRDgbam=rAL z{zVvrH|%`Z<8 zodh7vWxOHgbsT=Pw`uIhkO{(e_^W*$i+;4Hf;a4vnbsD#Nrc;v_M=&aU^L#10yMb? zh!pRs;7!Hrq$%JA7JG08D1ycJ;K6rbF`tCtp75r^JjiY*4U0KgUzQ-N7mShc0z~*l zVGQ0>B$GcS$1U7$*lYhlcfbdGm_jc=H%Sb_2;facJ{QYR8!W=^0ER;xw!@zaW^X{G zYEK1kDy$I`?R&fCeh;sMPTuf9qp%n%3AiV`VZU)DV+69XCr3F6Pr<;~r+{KA?MF8^+)b`$SKo zCe9PwVzl3zV>+-M{>@J<2)oAZso+gT;I+QOTUhMDRplC(9t01x4vYDQf_uUn_T2Wb z3b=vdVz%EyFOV)6#_$FMA}91<4BoKI@rXL($`ps%kEsFu_An{IfIdne!d&3T8~1R_ z%b##ZA`JGTz+V4;7XLBCza-Fx00fC3cL<=5dkTIZT$!{No&6jE?D~nz`vrcykte^& zw|X1fEABM3-|#h<90EYkN!1~Mn1rd816UZ$_Dt|rIEd9DNC#8)Olraaw)5tDCU`5CQiU@VybyYfpc6h`i#T{1@`#XFI)<(kv?vDmUb+EfG5mYf@(?IZ4Lp1r7>tMrW}Q-|Uebs! z_?G|%GgpMc$Y3y-t(%RqmA4hIqnDd&L)MtvH&M#=vEK&xp%f%3?YSX~`p)uor%l3_ zTAJn6yz>=O$W5+E(QJ=#4C%g|4!p!q|4@3y>EWhK>VDL{>-&K|Aq~Vzeza|_a#^B$ z&zfXMx`$C;H&$udjqdMXZH+}UxN&rhn!cF$G`jnGl#O^rZN$gIy6y#iQto8Wa0_4M zuD{eRnXETg6Q|0qePrLF@n48ZDiYc0wV>FY+L|}pq8p25`GaD*>#@n3W#eq#Fye}e z->e*CTAJi{t!A=r81*fZ4W(%Jt&?HMTzoZG_uFX{HPY_jr8B$P>rd3q-!{lu-NU2{xBs~|fyUv@-KoD6?B%B#OHB2G=jZo49u{tsk2#19?emQE zDAf)P9=yGEsc3gML^@Q~*Tz&QBr8s7w&?Zkd1c|MIUj4ZozU-Zg-q-(uZE+4T8Vd+ zBQ$TN&7f2$u1m7(pXGgC%68H4=F4@L`p%t!;$>qe_fltGPx6wOiq1c*LF7{Jvuf_p zw-7$nAF`OfV94WVB+1!hJj>Ce()kJb^w9_J*M>EHBduIN&s3 zDy+Fyn0fQ9?*%4-l;?Uno7=EE_jtu^*0w1*EsSnNqRvzW7_X579GP>R7CgR*y#z*u z!D)_;xijoKjTK(y4ni_BrKZk)L*g0@FHXMd`BoInVyN}gBO|y#pVuvSja>U3$6ise zOIY8nDFRLla@cpfz)o6eRiNkmrQhG^s=C?;wHsY@DW9)K-E%9KAL^F7^qZ8~n{n{c zUT@QboHdk73Bkile5%`lb1gq*bsF1lG(BK?Ic?&=KNP5=(MZ0ad&Zz3xJ5DT8TZTX zXUVJw-o+AQ6FOth;xET5#H++B#iP)(B%BCNYR)j4X`}PK$bf9)=1c<(`Qph0(n@pyMSbNU|yn0`ylEbrxa!#?kBmGYsMS$=7Dy1BTwS{E6SZS&0 zA(q~Mny%!?tSzM2B}oTO51sF24EXcD3fpw4ghT_OL9G$S9?hP}9?5=(J(hjJ+;S69 zNBgy*dFg~NUqw*(C@I*K@wMUY61y*7Wl-Fx#)7%^CUxCEO>k5l;R0htQ1cS}-@@E# zlcdhzYlHDfZd&Yy>W1TxHEBWWjs!zddXrm**FDN4lZ^{xn-jXS6+C-%dXo3b8#1}n zLbk*vT@KdT7o-@(zju>A8zg@hT)%L#dSWEg_mlYiLV?6zCJ(>BkF>x3dX_EJy|Dm- zWl?z}(jkjAxug2MpIz;zGK_ksW9xgi6I#z)PPSsRqf?844>)t(AkfYVr#XAM>c{!n zU@|*qrI^Yrt4n9wRw>RUhfCWr2l^_%t3%Jp*Nf)`FdK$5+p`jxv-N2xRIn=aU8Sto z?DJ-RBXuSEOLON5g-C^!)Rz8m!wyYYwXF&&@<~6lQNN}kS*qVN`Fw@vj}<=JCzshL z3nSUMk!*f zW(#{r*8Km;i}dD39eMVG7xe`%J|v4zBa6R)inL~reB6=e|BS!SRE=QtlR3eM|$1&}scf$W^nJRb8>mN75cJ%+JV-79(=?15j?t<&W z=cL`NlvLid{MHxMjjm<*F5|EFRQ&0EC%>yKG|N9~xbDU1c9S+}s%fpFo3uA{-kG`? zJoTU84dc?47cjUG*Ggi`8^o!%wvrxqyEXfAi%Am;iX@FSqMA%W-U0T&jf+OMwZ4F8 zMsu<~I#rIBW*N1sJ%Qx6xWh*y$n~RFkCTRPh_paUQ6S^mndY}aMLIN{`BB!5jz)&z z-F{M}?AnS#k;N6&echH^3p~O?_j49_(2Z2yUf*82(7SJD)+QYMbMmPUrX(J^8Jjf4PSkzKk-NKoD`5SKtgNGO@YJ^xqMJIUm=&ujcRV`q zk*LAR1NhN3^Wt@$9tvt0j2Lr}VAf1$tALxH{Jie2c5q_qKY%VF8;Yt=O<6(Le|Ryw zx77B^>Gq!%RALdTf*0Q2$LEj}zMYbHnU;VS9dVw{{gJBvHsN!%+ix#b^+yvuE-gcN z^|BZ2ymhUiEH6&fJ3l+IW+Y(&Yx9MxS3pb%Re2?-Y0vVvNdO^y zax8Q;&Zk7akJKkuyYcUa*mvWG&3!@>wZZiC`K?JggHo<%Q(sVWRiQ;3W=?R;nG*=q z^$0k=;yUU!hXf22I6KrMRAVrB@t~7*%zU(ddrkkN2;b(x$~WRh)as`uwD%wB8H=4B z9d1H}0JAz_n0-hsEMWhj>W1{o3ts_r0BI2S?@UjkpOQ_Sv@J;?2czXroG4(-@_#8| zhK9`Y^;P9--+7pg4-7nE=6hR18ojBJdD4R!FIF~^WS(p9bVuGOKZOm=mE7fdoOW+e z#3`p7QmFSXSKD8V)*_L6T=lS5X%(wX|#lVYY zCsW|rl+(4zKSO64PB7n2zkzUAy~>OCd6LLzCIwzEHGhS{_+{k_QroVd%QmIrJ3*c> z&lY$Qscq!Qmsn)6&e*+07ed|GQXaM%jkPZ3DA%9L0oBU9D2Ws`cfB8@4_<6g*nNu+ z@rgV|8hCfIXSvbzM~1XTnu1LKOnn5ejc(}F%M4$9I{4FMVtRDk;>INobNoIAU9B{!Rm!l3jAxArhu{GyOUr4^`%WL0I(3%J@}%q? zYQn~{PCWL4;}bD6_0L#xw=~)n|d;=GL@hb3cvmhdBp)e)ZA# zjX1~C=d~&7rKpJOFm1g(?VA!goBIYEZ?2Q@iQM~(%3nRv7#1(3$I)@BfI&jQ%b}-p zRCJ}D^pQGA(VjxU&7^JuqYkT~ou{`xuT#)^$MmIo8l>e|a7B-H{tkY(uP5gIr`I*C zJfc%y+kEhq?J(H{`x{e3XMFP$*6C&!2*nK$Szhx6C1-a~2b{&Sb|K;&b*-8&d)m5< zD1z?pTgaTM`#vN!x)N~ksN7&6DK=oN++0)7vG^f!h**e6klR8~po-BfCyCB)A?YLCBCKb~CTaW1~b8<;q&b#O@X`k3N)hK5NZ_T)>*EKbN znJo)m=1taTt^Kl5_Q5+5JrY9Np};9r>sc#5Oy%Hkw^M^+7T-L*cfG8x?_>V7-OG!c zL1L?(y>?>iO5Eqld2)+e&WibuT|VV+vFW+Vsy7oLcc3OaG||N8L(!1g*jQ%gSLoU3 zCK)nn&#LApU-nCWn<8ZC*RR4>E|yo%(q`ZEJC@~Cy(YHw)K;ngpk5qP6-)}0k#Qo% zw17b}egZ!joy2J|fSjC}RJI0whTpr~5!P7^h?6s$z9f^73(A?RKnGu;(=NXLB{6FJ zDQWlmdbgDzbwq_olmfkH*uF(thHIrw)N8BwT8)M0^^MjW_g1F$3S)kC-sti3Sf&>` zAJZrvukf{<>ik{LM`H1z=a2!at6jhgau&o3JYbOg0$d8%C+C2Z0v9OsQH}vr1)<7e zi0$d9{<7W!_H`4JM+;Jj#l7LF^=iA&%F`?NmJ4{@zWdwi$(+xYO#9(}tx{xq@Qs)C zqhADMu~MyWqqTbIA1h}~vo~@tp=K)O(B}TL9Ho9a7HP}-U1GBFT3cVdlFIQFXX@4` zeA@(H$B$4&I4&kkY3N&Y#iFVv+y`Y0`nH*jwR`xM(LB>5PgyKG-}Nh*{|k z-I1DqaZ|%mot1s`g{fnl1X1>bY;Fm0ud8OtjxK~Ho5@FgdVh}M z=>>YpUQJ1L-ruvvp>t$zGna~^EY%{f_yz7eng+EzT5fFIlk!YhzjfUUWl&Z_;UqIZ zXwk6or!84KREB|J)0eB$CN!kDM;pmiE+F{hRi|N?W@7rq`3u+khA6pP;jHjJ8KOMi zIj;zXrcLxOvkkce!t!EqaQb8j&|1L+@#}x>s>SxQT-Gm zRn_$F(rV#|Qh#yY!Ji>xB9w9}I{!*<+d<8{3E0Tw76JYfV@6ooCR+X-EbrlWMwPgL z5i45arNQdvjbu-*_e_I=t46KsxOpr2F z{;Lhwxu)|5ZtW!w3mXqBFl!#lAYrtr550FYIFr{hYkUw*7F{=C*lLKB@T*Q@{9rln zty;_18bYlxkLuqoYLp$L%>z#5`vgd^r!xy~O$Lh4X^3RYwm364pUL-upK2 zCauJEysA!*^2-yS_c#lZ(KB7>2E8I>~%4*xc_9?=K zLL=&x2G{?RglSFHaJiBr#@f&&VOJtKh%}a%64!&zi;QWOPlol&JK#qkPcXlCdzr92 zSy+#%)?HdFoSxBG?!CvXyFDE?q*{q5AC>V|3SMEaB2R4r=dZQkquuo+fVu6BX!aAU zw0WDsx?J%oVf7w+nKDF1+w5kRzD-=uGD;AV+yP=wxkk+9Z%1yWB+rcc&DeVkM5jl% z`_K;~UXT40$U2iv61f<{_Ry>a)s?k0vRRJWVB4+zl*VexB?vnTnF4ge7Mp0hndn;J}HD%Z_umwcc$oO%l~h)%<1;p^}jCbFt0uO-Mkg zw{rbDbp=mKY1b_$w-J^D5a{mzncz|OJNMYCO^P|K3&pX-NuEg&MFDFgawl3vFk?TQ={@FJ-w%4E;9l5Q^Uk*qVD>4I&4#f^++BFDHS1-Yj0-X{3=ezk>6OdhEAo` zdgEv8!Y6x+TQp9jljxMidT=VYY)H0Nb+I+=++v`y9aR#l@0!`t?*ra1zjdVK+nqUz z(b91osvXf3Z+8vs>7zb>dcE#i*pAxd88aGgCsYrX36o;`%w_DvLSA!-Ql6t(Kbg+eu1y`q?f(`@E*>{poPk*J+ zg?lB~xVhIY!&t)Y#)wPgpK|Gids)zj{Tv_h3s1=JotSy)7_ivEw12wBR4xH^*~87f zwjo6O_bWVp<1Y=<$>u5yT%5TY(`K}G4^G~^qOo!^5ssEUQNv!O85vu_LdCM5EkE<1 zXT$D?!E|~=PF?%Y`Uo%DUn3G_#x%7vtVJ89SC(zA!Xj>X8RVE6Z&P9}DhKTK2~Ckm znGv4>J-XCDCVf0u5|t&Why+t*b4ajy(r|7jaMuCDkWDQFu1kD5ET;V zM?T@)c#<&tufVAqwXFg?%@D~Vsjc1tgB+5US4kC-*>#+&Z1tp{Bn)FY6i!oyCLVY` z+wm!Rs5K)0XLP8rgmOLvmAe(Lawcn;*w7{ZhsMM`zdJYH7FJf$gwbD3(e5c=nMTo% z*EUsAm25>PhP9rt>>ksjv4DvpHsenX?2>1ZO03a3+>d`(w-{1yqMPEZH$*|WJ<@ES zW!6(6FP#2e7ItY4u{3MXA^xX=`1*iJuu<-tx`zi%7ANtSWf5CB;>lv&SKQIlnst2C zC+7ER#tz2Oiu_Gl(zUXC<2#Exx3*9M^38iWnS%P~I~YW2wv$&Q%+4>roe*lzXMdiC z?5$LGP_L_={w)8rk$a?aO=jM6S(aSZGk8R&J(Y*Q;#LxY;?GZA^RYYo*C%HQl>9@v zGd8qQ&BY{N8QN7zuaJwc_r&+h6V z^?gljEa2|pk*^yAK457R5$nSEW7yMHoFT>Irf zUZ+svz5q3B1#dHbLogwoll0P{F)`p$UE%lqwqzg)8Up#z9S|Zu`b3E00Tx^U) zB_%#5OHMZqp)0P8o!6D5o*HL`C6v9_a;8)cx@Sx>oR0`&$*;e?EG>#J?~7k(U_WiB z24iN-b3F%})!>pJ-e#V7xtKg)G_STSROn9ev=RU1zVJXw83`o-D3GxZHk9^{Qy%_xvq>>w2V0VmI5e08-tI1#Se%f6F||9OaX=I zxhzopJ@*n6FX=Nuq08_H6x$5XKvBl{1{7XQ5O9yF3T%17oB@g(Ea{+_V`&0K8EZQz z{LViI1rOU>P;9W3fFhs00Ti|uvO#fz1N!xnLviC`9Qf79p>W`Q54MPKLF0PI6$`d# zayNs5=F$sLbYE%%MLJI{D0F!b2gv&lY-#0t1&UyPG$?ol?t!9BpaT?uAT%z0p&YPf zOQ;SM)xyxYP$B@>az-=}6h)#@px_gOQf(50`sj;8W{!)ef_;1?AdakLC)h$J^#Byb zQnx`NBAo<^_tMbyvXiL*Th7U*f#QX1DJX2@ia|jsUkQqL^7WvIR>%d#MMa3yt_Wpl zpahM5SqXAAP&pXvyrUcl3V#)-Hn=a}2V2@N+kk@i3MA65K*YArvbF89@r0i zLa+9(llXt1Z2kAd@xT2)tN*LNqQ<{YDh^MGucm?hA0G;-Ymnm~uR%uJUx%(G_YJ7* zx^F;VS!))8;bdA+l~ig$25D;NgI{fGLt_SXpv%mr3vu4*LN}PP9(2Ke=;eV?@%m8I z1p}z1(*R1<#t{1I!0<8HxxnZlD3pw$>hCj-2V2ZdAnU12pMot7rcXd|(+m>i=G9=! zd-Ebtcv+Nz;+f?cK*G}V@C3?I$_k=)SV0I6>vFIUtIZuyRN6qdxP~oc#M+^Fa1*LH z)mxC*yaf$1(+;}rjO-yFx9p)o<~TsbXzmE!QmIbR?f2XXx-)~EOTZuJbb-X63*?NC zD^y<8ZqQfFZqS`+?G9aqP4`>G|M?>)aLYr$0DJbouWzwaDEPTR`0tmwni_Bf4eY;v zDt#bTRBnywND2pE`yNKYV5Y#5$5}8@QctA#kFzkCw}bP|e_jdyFU4Uy&)yXi>WMjs z|BJvVU%3V4#V|z)t~pFFMeh1PsN55u}LWqM+&bH*7G3 zTgND@!1qJSju(=lj0vPj;GzHm-blC&aMk;)G}g??Z=EQt**=&9`?mhSpM7SKA|QYh z^9X~v57a}LEA1~V@-ea4<0!_26~f@O9H8<+!Y=@qe86m|_Nf)~Fo;LTFeB$73{HcA za17=NkOg53C^cU{z##4)!)UWZ7@Q6Rs~F5FfXo-n#_wqwBeuvQk6~V1fH1f%w(>>7 zjeuYXBV{T{d=rDPKZe=o05O8NE$+u)?f?rA<{{!|_!A5QdmOcxjuXP*wphUriJ0aD z%>3y7x#Gqd3c)rQ2DXfja=f`94sMStF`NS~pa_45Dzt$Z1hxu~VonG_7~CFf1tQ@^fO8-?Dmr7P$UF=JdmP2w5{59iJ#N8Zc!3cJ z!|OiQ=72#sAH%#80Wre3Jr)Q;!u5fxL0~p=`Hptjd*L|dyC{Ug?eQZF#uccCFs+%h zNbG`hypB(ZLm1o^Qw1a8Nx-FGFdM5Fm;F2p=6K<-OF$Uh7KaBT5sMN)b})Fwvq=g_ zu#>1S<~Ztcog~D;?eQum9YcUD1Wc!ti)q0LgK#;9nU(@EBDg)a3PHmCfM5vY2>a1> zxZ)hm=8O!4!R>K>2oljL11yGsqq3HH{3{ldO5Cw@Y-Ax0Zj%*4k#K6jG!z`wlZeh0 z>@Aga4AUeBVQ`yViNSaS-4KTBadR7XaSlC(5mtaOxIJb;ArXTLfD8&8RXf{TIPMDc z#r#Jv?B+xix5+6eB%A;!LxH2>udi~#&ZKt7(#cVRFt|;Ihausd0DTyUNziH-)W;x< zk70_HAq;MhJuny!AOXVA>;1mwjX?w-!wjoH7~CFDU@*SG-!N#8hB;*%y$nU*wo@w{ z30DT3!~YdAaRrPJ!);s(CPEb$IgG%ZGQLuUB5-?zjbH<=MnJ!TjYw64B5>P*jer65 z|Bi4~hazx~920>UQ3rS;p)DBpN7OZ-5Zpr#k3_<2fUHRH(v3$=HF;qC_B!Ud)>RNA zj@ysbNF?IdRe(GSEXcCB%Wl|hulq4h_%(=w+a;?gB%Brqjsnx^THG$i?u>Diz;y_N z+q!-XCJ0!7FoMlDY$7n2=wsPXX+jv>ekw#G;dOv%G?>k&>h(K*7z8$>qjQj@7KFj= zab+}SqoD=#M1$shCA+_gE$rhnYoRvCk-%*-OAK}`m5u?^`7xNGg-r!JfgDZelMaNz z?QseQ;|-KSn5e76Xj=^8_)Sl&2Vrn~439;^(*XKdFq`78fy>xIVGTN(jRa;cz)nFD zxIOlWMIyfF1BtPqIm(wLJ+T#tWgX=N7(g7{CQo3}p$7iOB8jk%0e9?$KLXDZ&q$&T z!6*TKoSu>xbDhPma@e##!XBxb~|yDg9646 zIs3PfhU6xP9GtF}#dfG-x98YWJ<4hRPoOBy=NI=lB-|Oe6Nfa!jz5P*=?)6Rz?S_{ z4vpDi0^+zhuHKt2shFU9#{%nty*S8_bMZ(?KXZs9fb+pui*_&baG^b#04v}Y4{;LX zkxU;g4mr4=axs12=D@^Z$U!`2qOk8%;m6YTw>sqFG#c=@gM>2! z33s4WO70*f`!U-uY^4ea;4D?Lrn`KHrFnEnmcafYhdu#$eh0INf*hQs%139a0x&0> zfjj1e!QaFA8sHA%kuP?N!oEQ`I$R%O*z=-hV~B2qH!kVzLQ-W;YQrVM$Cp7(94d zTtUH02sz~+*oz^cd-S3Q354X7b8cP)y-9M(QM@WhVDwq3Z=bDss;c{)et&&m7racr z)AOUB>Z$i5C`Me)aXAEhF!H@qdTU7F7m4`|Y2v?&bI0 zx%1OSl`rXspFRR{asRGt{DU{2-x*YOeZIE8&#gD^ua5Wo_`k0M;HSR%sN+zUOaMJ| z_xno)TuA}w-Y+SzJe{L3RC11u7A5QIXOH zZ0Q{nd)6~HjDK6H#mHqwvdaccx~{}J>W3*7AEigo+5i0Mr3EU2AIh1n@T&CgS8qT3 z|F-zAAygLzD1gS#n2^~HuK(lLUU&?Y{b#C<$&9SEkJ}>| zQ4NO};*{|)@NYf$+$AGC==6pKK$O4nm8TcfVXGKqz<(nrE|q}F2e7dn;MF+Kpuq&i zfQlI&IEy#~H%3HitR%OT06xhWF;WE-U~W(bzV(ekuqQW!#AH;i3{(m>RWtqb5|obm5r}5#FfoqJK9~y&FaG)cC1ipEpY?RlF=+TMlMrK&ov)-MGqM1U*&#rK3Cq1( z>*3OdFB{Hw0a$_0MBI8_x!u@@9=Cccx4PN@4e;oBFybLIc%-voj72IN#(GttvH_I} z*nd_5K3+*J;{jNJww_-xpaQVf2(|)@j&D(cR(~UyxyqBSEiM0eX7OdUFFMDrj}!N4yr;oFv-Byh6f%dc%Q1b0HlG+f|TkQGq`@M9JT0}$|f;m zR@aANz~lli60L0cuaicnJ6zb5k*m}=2sv8nY2Ota)*aAG5 z!GG}qh`VQiR|^JbU|Z@~#0{K*ZK>;xV23JT0F|eNG8+BRq4?hqWv=&Po!J0&i~+Kq zRRFiD03W|%j)^lzRJ;nH!C(@8#tf_XhRyynWyg5KmN{B2$4r{Efue_-yx+T_>YQl8 z6Ge1+zmNB+bNCqL-bVKigTK{e#g{#3KYxGE8teh8IuDwUQ4CRm-6-a{VvaR9iu?PZ zM6Xm?gRzZ5+Ey1y$QEjja5F#!bPE%#7nvD{WJ1Z5Oa=JCNQ)g%Qk1Dc^f08=M)-TG z9_RXSN}Tm~Iwu0)yGmqTF^(DXxJ

F3eXE3x%!a6#<$q&YW~q}v zJ!E+So)H$x#+J+802**Ew@8Bxv1-^on3G_PLBp~)OCvF^UW;p$1Vw-U@meC(zAl}Q z{#Q|*s6I=>YterOq`-ag;8DkMc_r?VT2!9izNxp@d&%b|&S7rS1`+Db__pICJD^h7 z_#T`VqwW zl|R5@uiBTXfV$sf%s93Y^!M85y?cF(Nt5;@cC3TS@^k$`TyfSr)gYc5C~L~+SM|H- z_{hoF(Wd;6gbX|ywy(H7gFc!cfE#C47?IkeS!w2crL!sprhnq_78Mv_1GcK*a1V@` ztYY+D6%G}Yoiu3&QUOQaSEafto$Rqm*^(W@h6&ay1-Q~dZjfpm16Cd;Boo+=e!u~8z#BBn%`_w5odV6m_6uT+4~S=F<_YdXR0D<3>ensoZaYT#9( zQh} zJ`?duMIsfrJZ?k}Z?OS~R)LY%J}Wv$wLJ~WK7TiY%x#8CZEkh-xZcMIEtF>o-`x*c z`JHH&|DhBAEC8ExlVBq~+gx^6rxjZ2Q&ka)&fPGf>$=${T z1HYHan13yUvo8j4+0QV!*L~d(6=1RVOHj1ffJ($G70KfMY$L49cA-TD_?kPdk5buy z5fZ>gFazLifH8(uU_KX^)JZMN+(b)ZDV^p=W6B^^G02hiT~vc?G0=uccI_nhrOWqd*R z?teY{^w)3R`|Xl4p;~*(->hZrZ!@fxNF5p4Xq4dgd4|C6&zOK~0<-}KGlquEtf?f!{KjQj*ZE4lT^cfPXT> zqWZ1Oh`xjY@TR&_1q{6R(oE#p2Cy2~a<`G#qpn)?n8iQ)U;@A^1`Sbxj9S0rV?eV{ zb!5ysL_C2dVbUbhzi4eA^PPQOjz5-lll|@A-&t1g74wMWze4AIeY>vN0dE6TlGRDM zy9O5489%tKY^jX_2HfW$nbkMoyMGLc=?GxGRRs#To*QBNqVw@t9`w9@r${}x9Ki&> zzmNJf89kiL%up(_no0)evzP)nmc<2dl+pWssPe!gHSmmJuvPoIm@$$JFt(5YyhF$; z;KBQ-PX>O7H>ivo-$WTa=Co1=zNUSdih=Xjs=V>@4DiO!J4$v>{)ofO6Mvj^LZl{0 z>gxOc@ajz0!;0!!V zg9ogp(k)DYBv{X~L1YOzYVrqzSF^z^hTws-8W`9LAT#Koj9{_PRKO&`#|<*@XF&?Q z`c9Cy1wJ6-jiEAVs)tqmTz_+L(g6v&4bg{)TUm*)8qa;aQi-p*!qMYApG)BP9mEEB z@N5G-aBrbK@U#1V2!oG?x)DsUM2W1|kCH^~#a=xZ*rEmo)*g*V?cm4e2Mw87&qvP% zw%UNRbBq0Rfvw`N#9bN0D(7L+q!T9g|NUIx%BRw{0L&OPY0|U-(-{U#3h2K}nKsa$ Sw2Mms0000o; z2_%q>h%5iVY!pFfnN3_sKy>9gyKDlj3zv??31`lwBr( zp1J+l>j?a=y99(my*Q2eh{9g`VZwolvR zGNKv|F~oVsgW%tO?zu}wSkUPW3xFs;`kkjI)M4u}h=0H%CoYwM$_L=s4)ESMub{yM zj{y}kEN~TZ1x`jpYV1jFDFJ#C8L_4cc!0G*8Ti&?T3mVBsBR;tYPE- z-eal`YPJD`t|Dc=_-AiEHWL@!SJk)p;&fLdH&uw_#GZAOcdu})Op~qRza;vKi&;XB~2P5t?Lq|FeV=7YFFxIOAl?|v= zfd5qm^mtEd6%W7yG<$x=fC|7;BiITsI=)2(T7QjT<|+@mvNV15%w)^nzUUl=r>_6* z%c%-sdBQ)J*0}zG?Yylq3 z(0}*<#N9H$s)d3h*p@mKae^b*mb%^ucBldb=y^&gqtW*rif?`>YrPfg%m#SJ5D{C_=bum$MVSp`8Q~ILQ9s;^$+g7nqJO#; zfEj~YCQHpsT4G4D$;wGgWR^0Z73fizu~Y?mQeq+%$W-IU|DGnV9ErT$w~7jE!2m}4 zG6oGA)IpVgc=hl7=jQ!T8n)4S(~X}^m56(y-Xh|j$lHCTVQn!I(SCqOlsKAp0z7_E zUJv4fINysUw%ULmKVZg;-d?x=t$ze~i~x8tz)Axej7W4Q0f&_GCeZdj094YzXAYDI zZwPErhc$eUR0?)Ug3vKMQUx-=Qw5$MsY52>m5O-c@8a0S0QNXEU_cZT$Q-2>BiHH& zoSYLh=vZ{<2?_Iz_jP@na#Mn}x)Nn#Uk-&yK+_I=kyDgC^{o;%G8^K>EPo%$GE1EV z=^^F?SVl0Ejjfig0VHrOw@3qrSZ~-pn3F)ppkdjYrI8p{uf?@Wf=7RUV=fWizAl}Q z{#Q|*s6I=>YterNG5k-WzRt>JQ2U zf~^{$4ASE?L(EH)^XjYXcMlWMD|1c0c7s}+gaOn%{T@T;89dLZM#+q-B3`nzcV4#< z9CVclGc#TH2W2~(`{&I+PF|Vx?)AS;Ub&aNJmZSI`+a@;zwOuY7Jog`>8f`F-RCjH z?$hV_-ufaou=)JOPagXJ!Q;QU{Qt#M@2M#2g z`{+8aKl$;r6Yy%^QX8O*jR0r8uVSz2u!<_c;AKW|4I9uyR{wVa6-mONL4oye*>|dB z?U_5$*|)rUjhODM7=Icumk&+7dcD4vH>eL>qvwyC?Nn|2KIZGzsGgH_FH(gr6<8|b zJ@sDxfQr4>zDxzY`#r>rV;ezxuYKOT*T)z%Xis9NI_Oz`tv`q>u6pM+NaqHgHP!R0 z`dxH<&B@r&ru>kE3_KdPueiN}KAInZ8)sG+k=mnKY2|#SvwvO+OvT|PDzJtPSgL}n zdtl0BFGg=w;ZQ-@L4$T6FW{*As#I4`CwpvCwq(a@!-VRU2e{HfZIIVE1?;8JY5P2e zR7OtkIqMLeT^;+mz)^{uTPsd~KEVPb_SLgEPerP9cDry=uL@KuruR(k!!D1R}GrJN@+Qdoyvt0;E~J?yIK1Cl|EvbnfErZziuy`rfNQOzV{)dTeXG zGTeJ_p=zJ*^E!0Um8VJtRBSvEQW5h+SoiG`FHo_s?(eC9o-?aggV%I|*;hVz7&K`6 zq-tQ3@dp-v+4HT@+?*fK!k{&-PvG4W*digPrsgwASR&$U*np}&6Y)w#A{DqiZjByZ zVgnAX0&8CTr05jYb{mv^{%#GT+YFbQZgusz-o^+S%45QJ_d`~F=iZCUYZ8)|#H5jA zFHcwZRe6Y24A4GHL>-wx@OCbu?;ve1Pl({PVV(qkU?0mixtmNN_`OWVxD3v|7@%c4 z!_;24b*rd=ioIQeqQwSOB3`LT7WY>h!Lr(g78THI?zBEiWdqib05yUc0BZxt7*&Ds zTwqWqwJdWJErsRjv_2a13{n+?T(iE*%0~`P#h~)Jg1ivr<@;Cb5LNa1B9-@2RcZu1 zK-oHfKf@JX*%dx{8_=QxD)!#{fz|ny3RLGexx%~Jfa<-y%1Bi@U!Cvi{F0X|2MyX7 ztv1eQqts&B~#)#5?+Ml@a+;g=9mGK4Lx%1%DU+;hL(UdZw zT6@dhtYz(Q8dfG!M}{^UCA58(A@KV%Cg7R?P2gb0s$p|BI?BifXk`G(Hlv)!d)Fd; zc=2?&9&shH7WCedxV#=z(AZiA04&bqHex{KX!WQ>>OfRFA2}P5?h|Yz{yZDQir zw<=(J7Aj#Gpn9+Npb2pGtgh1EeNTow$%rHcj5y02M!ZZp7Dre*(~IgD&x43l%r(Zx z#Zsd;zY&ka^G2=NFaVya>#6|3 zTQ7|wuQou{fXm%RVvo9N(PI_=?1Kpa?=ff<709UdJ3a)OeX1j4)*<2vDhY!IiT*`v z`_Ol`c{%o2)lK!ce}8M5y;rOwj{ORq_4RpO+5u|=ydx>`VR<+cBWB`HN z93)zO0^emwOh*9rRuw4FdTj*vMd#zQJm`6Tr^tJ7xds#T{x<51;OD*UXTE5(IRCIljFY$M z5juzAO*~@HVgr^DHrA+tnX{4r3)q`Vw=e;cz@Alus1ma2Mc1K(G}+WzeP= zLEw}G8#l4s(#zt zADse;b~lZr$Pa@WrFq=M&nE}=Xk>7DB`l0ps;39O?tXsX`{1V=cPc*HRe$VPA8__o zNKgyxYz`bKcrN4OzPq69y~V-Kea2Eys7TFjw=12WPKtB|`h}Y{b2xW4t0~&WZ(uldicI=$3AVl z9d#1rv5a90H&u@N_~$*Xy`OVfctYD@Pkflj!AkDgBPs<&{1>@rvvs{sAATKMD_`Al zS+VO)V$0Zzv=-(tldaOC%NN4#R#m7*KFhi5!;_#f$}})~P0{z*v#$wKds!Fw$_@0E zKPYF<{OYW8+&R|57?#tUZI??tBr}?4>!K}1lyPu$X-_8<2&Erb`^y!N9XTqJM2ghnG#iTaO^h!6Fk6IuKY)IqRf0T zJ^aRNm!kaqauv&BqoOj=pu@%1vkwd%tXsc|gxL#~myRx^*Vd=@SQy8@4kZx3PhIqP zjQupUw6bvT>W=%4a_w`!h=0}dLph{8?D`$i ziItMc#o!8}B=H55a;WWfPr$OZwR%}u8FziPox)_zce#Zd^>631EX-;}lN7~$EO{k;a%U7^T;G$>9HM#;`pS=u0c6F<$tu zX&@cCl<1Ml$SoALr**_kI`n@g@n7~|rZ#WuHdE=1sf^f29oZUTXxY-M~CYws@q%v+6(nd9jpxMe@vo%>? zTCl&1mx2)NbvG5pZx@vnPGdSJhu_H%+bqJwP^9ggM|buEUxj(p{-4P;>t3J-R+F}xc$-?z`N z)TrW4W1aYsuAkZ3;J0u9K zhU7sBf{-D3Qi337NM4a3=o*rlBng&=WG+d9n;}_Dk`P2RB&$hE&BsbkcctIHL$a47 z6d96zBnfv7$q|x-Cx+xiNkWeyIZu-C$&h?YlCWS%u9GCt8j(9B39LrsK}mv;5qVOw zVm`Kdx~s6_4v9&MU};3=k|MYnk;SA4K}KXXDZ*JJvWXNS-H2>2MJO^N`$!Rdo{=0y zew2}jiFksW3fYp45Trt0;3B9gZkF`1-Eok{_-OB02=glA?)&LiEzVrkuLWNy(Eer< zeA!^R)RHhhEV8t*vg;dd@Wbc`PYDg@5PQ{ECj;udvx8SoF1331l;tqzd<;GX1vR9< z^9-2zGREWMGwb1t(^@L zH5t(>ed6hl=eu-j{_>{H(W7aBCmc4`83eSN)r#ml&D$3H7TgLeDOt{oBt|&0)fzXv zn!8dkQ8F=+ot@9AuzR7~ap=#`hsB7ob8I-r$c2RhF@dR5GsM^~oF$#w@?=5z_fLz1 z_vc>erb~>+7O2zs`>&RH|Bg~980N4Dim0z{=(?rwz5K%B@=`IMp66M&rc36( zTl;GKUai@)>Ki>toRVTKv|l>wBAY~$#b?1rCroG`JH6eJ>)A2{fttIqvhSCwS7US$Y zN1$4#~@j#$_It!c)zOHKOm zT&Ct}#hUYyS9|o9PL*(v{qi%+UGTp4(Q;drG%5XpXya+)qPZe$uI%{yUL*4HRu<1} zmJ{8qKOS2emkAwXBlg_Iw6njKw)H&r5~rPNV%6!)UzLu%rJ3|7;g-k?X#0+0&1-m# zrLoEz0fMuU!`oODX*aM>wz10|H{WFWt8ij?rEfB}P}cj(T*gt2BO)x;mxuU27>=&g zzr0<|e$GRqQNVDQi3*mxLAZR=j8<;B^SN8{ms*%@q^{KTtq>)M*z+tHU&iT|BsziZ zc?OMqMYWsntTJQLW&33|LG*GPt8YA}9~MYIW1q?!%9v!)#D2-5sWa&{-;NnW-Lxg6 zT@TqCxnt=Vapd@6w#=%5<{&FKQFEznIr{ z9Np=5D55kvu|4KS<|m?y?XhA=Q_VFDo6mxK{xqX)2!r<%uhEZUs_^Vr%Y>W~v>sO~ z7zs#~ImCOVZ`38O&K%)?T`!)O^vBvP?}ob3W3O%^9lVRqjF`3fhY5X8IbxANR9{@v zcdB(vsFQHwB^}E|$5Qo20hLSU{Y%`rxGS@9-i~Pu7mEhvlo*IsElRZxNzz<%3J)ul zZLn3=6PLNGLzu4&eF&F(Gyj?=Z8Kf9Cq^bN=_8|5`tIu!rC&pscXW#en$!nJ9mze5 z9aUZ7*1o}*FI{3LEl?U~m|-;*#MxxfmnA9lF^FjTqw0Q_FY)$`%5D{f)dx2MB#Ko( zo`1bkU%Nc@zWBR%!EJv()}cR z&HtWpRY~V;Nc#Cep~TwYfkN^AiwxeZGx_1^8ja57Z!Q*-9t^v*D^|12FTNS8I~9>& z0R0dQz8Up=HgHAD&c9cshc};7*z5V2^}@q1OV3*SyRZFDj%HNFSC`*Yi&D?#A#u7} zv8TMbVtf4a>7ptT+H1rQ(>PXk!iMUS5kKaHteejB4y;>Q)AD4GZ!*Uo7_u&UAd>g3 z!eAhk>v7EHUQyb6FSSl2d+yp`wfE#Z^(V>CpUtRQb3LjmbIfh^XZ0#UP(Z%h(Ksh)C1_p!E$26PbVR985BOlQi7IcM9^so z?b5G5=jysul{7A$)eX^|o&FfqqhnI%R6{v))rZp~LK3fsM5y zr}U|dDj&G3#`IjBsBos;C&tLl|91|2wZ*ER;O~2l@ zT%y`6LieRW=yGSK)5wZl^stuleO0~+Z=g%^ zeqY4kHn?YtMy7ZANrug$tgRpZcnjQY4=&WDUCLIum1I6ZV%grPC%Iw7ha?qa>7>q< z`Px9N?VXMhVQ=2&11`^bEv25NEZAGA2l$E5rFXG@IV+q#<#M1$9gwW>_5Y)Iy|FP-GEJ&rg%G=`#6C;lAb4=INc*W1@M(vjLy38tl<~ z{PbsnP12#6y0;TWWl`JMA%BOCN14g&={+0zGxB|G+1;Sgkx^r1Z@r8j_r0EqAzo9* zjP;vjZXY&QD1Z7>)WnkH_VQ|?#Vx*2_Lc@jFrN*LG!!*$%~iWwGA=RclJ@oY4Yr)YD!WjFW%9j{u#;1*;^(t6O!7=2EIy#_P$6&BL8- z0l)5#)iEsPpEV4nyFFB;M)aVuQ!6c<4;hB|gg8>Jl31*zV_75)cRpdM?wr4@96zSj zY|^gu)IGjP&o@$lJ9aFwT6|hPqpH19?cz)0(E+;K`2K*Jl>RGaN9Hr1Xe>L?G>XzOnUNEYG<F$$>CvJt0~sGxQ`9{$08ygmJMKiH&~?h7~FqIhwJ6g zxOdCDI1x+tZj3jpM`7e4k@4I(y;GefEyKNhPQvo#xfxsT`Pzu<`fB%fHEpbKNcttq zp_bd;ZYollZAdp(l}V$R@r2edt$R80#%!a2+;oD|ZOi2cnNq2YlGVwWTJ2{dBTdUU z4$(!%Dcnfl9M<7b{d~uKQ~kAwtn=i#zLMIRImYRyT`GpbhyKJpZr?%7J-PqtZvAfz zZ+A7RPkqvubJJ`4%rg`>Fe(-ved6)7fvWSS9hm$*dcT=io?v*Q2duyOmv46(VN^AW z+H~{UOEF`TpiNh$mg{CE&)H2;)>TdWVn)bSc=mn$S_ z3!V1fpz7yas5V`-97!LQ6!U<^__ofun|(>CI+ITv)Y$qj)6w;ECmxs_Y5BZ~Da*F& zKo@QG8+aRzUkN1N`cU3%&(SP02JZkncK=viu^V}Q{beuJPjV@*a3M_edkyv2nf zh7DU3Vhpnp5yP1sJQ`+?Lt4Bz0P{RY7SfV}2R>UlfloH)MdXp(u1LhF*+oJO6)q6H ziwop)h#O@1g8K~OW5pAV7(+Y|Vg&JmmKEM&q@{$f0x=x<3lM`wAOkUS1weEKLD14I zn2tR16gq_%<3gbCZoA1y%f#+@#0c9168pIa?Vu#&r>21dbO4 zMxrQ?g<)Sf@+fW}2)a=W=o~KwWMLLRf%uTcgArqyY6MB7AT11%=Mf`QG7T{#r2tQj z6c{gMX+T&n4U*T90jQTUu?Wgu78qY-L1M?`z%YH0106gr4_dy;gPh$Jz_?E<0Db%v z^AW=BN+84QN~uVTnlf;HstiK#sF%RKQ7zU z|K$=%{nDonH1X8{5htmJmnLW#*97ADXn{_RYsDbMf%}2%ll#G_d1?cn&)Ok~4?zcv z(JLK*veyMZ1G+(okGUQwr#?Lp)barE>82Vc`k-b8^uf@$8-NfWsD`~E7>FT5;OuDx z2)`In$H*8M6UJb61ek!9ITPUQe-L!%`$13-Cl7%sFn8!2k~7H^_^eQka5Dg3GV?=x zyv>2nxH)*_ei-!Y<6)4zg9Tt7v;aOwErBs$3E);%2?*h5EAYtG8kEzhHSi(WfJehN zV66zWO-E3SN5CjwJp!Ehjske$Q4pQi4)pXI)!1hbd~VtUA5jNjlsEvMJ&qt~kt661 zuM;qGs0NMzT2crAzRlSONsR0aYGckBOq?JWFgJg@fRZ4)g0k7-23nHcKzD?Xfu7bL z11sKPci^MxfrGxgA4I}vdbm;z98~WCTDKklSL=o2pmpTmtqz``^|mMAmGc5cQ|ASe zu=EDA_pA2rM1ZXb zh2lslyy6Ng!Xk|pvTrN*4@($h1Ao@Dq(DP_0z#wCz!$Y zFP8I=eGt0}Ma)Q9z8E|Bx#M3xEbIuiJQ_80I|y%)20RqdJg|S56y0D_kH3jI5Mo6% z7{ncnSIPq(N@yP4A2}+5VA4?dLwW!D&);r5;I`?@m$>OP0V zYCuQa|3pybd{1j9{H-f*IR@MnF_ zK2Rf-W-tWLkL3n5sG1759(04WPUEm-NHP=zHwncn(eMBis$f{Po=zt?Fr^IE2akg; zQEBR6nr*xYjWnuWDr~oO(P^$j+rmILVqthC2|hrBDj<>Zv}7WjNzz~0yn{$on!GT) zatc47K~+>U!1z)COhKuH^_`LxfM&wj=_$o++v~j@k$$n01c|np4U5Kt>JWz{*_WL^nyw=3Da=yMrdSEb!MJrZ-JK@jPqYK7a`44 zARGHrc%@x?01c|nV@pf(l;wjmxz`I+3f(@%v8IpOO-{IQ3$Gli?s<#rlM}aC=(HYLKX30c=BF|F9L@hNR0rY zxFYaM#-a#F7F9B%9F~6Sa=E^*4Uiv|CNTofueuM=ph|YkSY8a83CCd{KqFMt3XGB$ z11MB=?3x1>A^#8@whl6l1S$JO;+3?-0SZ-}7Ue||b9iVd1+zZoDyWf4GYHd&NdOvD zxjO3gGJIf)zZaJ4kR%agV?x9$sY)U=a;O5zu^&jJP*7&U`fQ#1as%S-_ySED* zn6lxl@54q}Xodv#1tv0{KS>twph~Lb9#sdWMBr%fau9(GU=d`za;6*tlSh@1k$Iaa zW#j*QzTxGeZZfhU`39a6q3j;~Ir4xDRmTyf>}pCO(r_t2T4z8C_Gj?QSqcD#s+-WG z1U#rprktA=rxca%UrOpgyis5n)uQl914@7fRmc=IZ#&9) zi*gEBKOnwPaul)xmAfS#p@_}Bq>NB0po$A|MdPu-snH-d{Ed551prVLTmzUxe*Z=^ zssaS6coYPUxEl068tAt2toLW#J zfJ)raprI6vahG=J$HhI#&8P}y~$8Nk(ejYAyrhx3AT5H2ND zWk1Bc2u1HBtu91}L;CpY0KRT5uOwZ-g(|gPOrb0MuYDLwKiBthiyqV+2P$VW4$mL0 z2Y66**OyV+x;EOI4?tSykQB^J#M~$;@W&niP*j=mfx;{lH<}IlP{lbAvEv+GnWzt7 zsEW4eZi}RhGG#&C0)PJb+hPFmod@=kMq279+ z+voAvB&h8?UW;;ivx z8jlyi8&hGZcN!KGy%ESU9*50=%Bir9c)ap16Dkb##=`mT*A42byFSgU5MKfauaSVK z5jqGRO+c1CcK@qokW(U#=gL9AjebXgDqtM%A*dq(s6CN@SGjhGia{+nVF#6d%2D6_ zFWH1lA&o>pWS58+s5GS#p;jD8>QM$INg4?=sDg^?OvKyVgzI@teks&)3-!`cg9iu$ zr}>|8qnvmUAgYp(<^?=9A3AygZ$lY>lYWLc%B-R6s_TX2geUqMk2LBXyxI7$0Cg!? z56pr(F5uUWz9AWI+?1MBX0@Plq1I$+T3D48Y7)tiMiLlZ`y{*oGn^`t6KYNR6THXQ zYBCY3pu)P6@HAVjpsz_BYLxyS+nDu(GH9NE^*0XA0O3Xz9MVe0)394Z_Q^qh1lRN$7X6m;-dy;Z7o6yczmjFK zg|t#Yl{uu~1&ZMDLx@nzmC$sg6e`HV@u?+G~UE66?-jMu4Dys|lbP(xs-wHSVNV?E^-=JZ$p`k^i= z&txiIzybDJ(JMfylT!?o~3kQM~OJ3@G@JroWhm6#+haei$rcn2Sw5hhfjpl%pu z3w;By-&^RHDFrOh2fw;OV5qZL_(E?O#Sd!^Ii!IEPN(4oI^domFw~k-c#(s^^r072 z*!MKN&13jPhrm!vs^F(&7`&-q;3e}vb9O(xp{@btP<4Ww((%|T=u|o~_jjF`&!^0L z$`Gud!b0$tfbgKs*ZFP2EtKmAW&2(aybevKgZ^*Hz$=TxYb3&hT5f|X#^2S$aA->wGAq6mnqPyMGjPfu{s%*yr@2?Adf*9wGT!b` zL>5RfCkwAU1+P|X;T2Hpk8$U#P1K9@`tgp1rl>qj*?2)N*bCu7t-s~lo7>!>!W>rY zTZoVi;uEv+ST86$8yR2Cw3Ko5bJb6H*b#1Y8E0UgScowPSptm=U0RMp+cH=McfwZ+ z1cy48x6Iy7T64r^LXkNjr`#O)WCNENfmL-y5v)pkGv! gcXJt|Z{)TA1EPuvk#g}g%7IXBE*ITh$_&E%AJkvG!2kdN delta 13049 zcmZ`<2|QKZ*S^Q}sG?_!C(OeSpra`1g zc}0XIsTAM2&c5&a`gcCR-_^SNtmj#4J$voF&pBGTL)UzVj$&a<&%lGjv9RE_>$Mq) z%?f!3FynBlmN*asUSX)=a?ul(WL?KQxZDzDOhQ;@s;$w~eYInyKc%Ljgb zOe?+LLCO^B==anceIBv&E^K;vbo}>BKtxoLcIK_{{mPUXPLBn@9F_Z?_w5vOHLaD8 zD+R5HzfJ9t6Sce*O?mWsblFs^psRbxGn8-fn#3+6$4%bB&b=XNjRQ$nCXjR$3$+<>g=!R~ifW@qi+ zB#Sw9C0Ku$*=Kg{3yImw&NLqi)Sc=4U=zsnWS!HFU`38bnL!0B)4N^ahaIhJESF?= zy%uctG!37)=Q|lqc9VWvs8DfuI^g>^2J4jWr%NGPWgnEzyt|Y|@hrU35YA_PXi}-> zVjoFq>#G+HFJ(8CcY1g`IkgWjnl^r@ulrj0L4#lANRi%Kzk~C~*55d^WEP%sy>6)K zL(jwPtsOPtdLQ1XjHmcGbv)jtw2*slBmdjSqUQ7WzDD=u3tbIga#d3qhkb?Y^ZWLSg6d<_0!tqvu3Ha_*Z4l~ zf7u{#+owiay+@AdO}Xpa^SWSVNAT7cjTW3cHQ5%v&Ib3h26Ip9mtD8m^o1;3v+n|{ydT{C|B`nVi7#mJR1 z>fShL&(Ylw^~fM(c_CCq1(g}c;kd%fH<(~wOmIMR{u@`~p0`O#a~$XdjfP|>?p zF)CBPh2Dm$HirzP)ZO#1m^yM$D|O+@uK~Y6r_k2Hw1I~@uTO|6ySj@KUOTw+OW!=& z`VP6^xf{xl0*jydcDpT5|MAIh$V;pk5MD0?9LVo zQmqM7Vg@DFgXADdtTJI*Cmx^G>0IJoOCri-vfG7I@Jmebe+)~+CuFpCxz}2d9CFy# z8!>H#TXj1}+)1jE#C#JbX7PBqbEMckper)ff~5NYdX%_-?&5!HK?=*EunQV7$-%99 zog*HkFiB#A2@|Jy{JG8%#DzrE$Yghth(DRp+U@?C>dlTfO56eq>vV3&+;3w+l2jR@ z%VZxkRgolKczhQpu9vxYQ?dIg(iAdk>FL-qd<`Aw(nLx`JXlseO5FF5h$5Nnh7x)w zGAP2G?x!qBVma(wMu}pu@XpROchW9NVunfLsXn4RNenUHd+AU|#j2k4b{^W}P*MWF zN~_h^+j?KvB`eYFie4L;qagX@i7bem!^!HS6hzv>ZRaz=V||fc+B~W9smtY3v-#V# z=X*`AuJ2~;8Jnyv?)AO8-k7ate6p5O)|-qBv-NzOtgY>>LWbA%Owp~&$bFSyC&s(4 zSlqB@>A|y|bN5(ejHD7b#o8LS&xzE^lsh;vycFksa;By2l4}H)LypY>xi%yC(ty*6 zJ_*CQMiyza4A!=GHcPkfse zpG&)uRkD0rMb;%%mlIjihIMT$mG&9$6S(YZ#oF0Lt6U9}`1Kt+GkDaKWxng}9~|$k zyO>L7QmnPItER0A>-e}Ja;Ncl`byQ_zJ5r~dAM&%-!Cpp*ZRE_(9~|7R z+O~ro$;j_6)(6Aax3*7(YpU^@+dHhBB^U}&1NB$QEl<;u_cxW-c!|A;5kNW<%xi1@LDeXeb z3gI5T*Uf)FfUmn?8q$6dHjW{2U{!MFWDBARt8>U z-v0U*#do8x&}E&vRkr6aefHP&?M@3O6pm3VZ-rwy>7TCQZFw)jlym`FukaxJVf@J3=$Sjl`VPGxIo8EUYX2-K-TK01O5qfx zMRcodR!kT3$iVu~!>TpKtqiGnUPYMz-lL3W`n$Y88TxI*M{pDCuCRs0)aw$zzjWJo zAbhaQPjrH)xBV7htBFXJ%jn9mTg7_sn@9yB9!=l9{I!%fZW^-hyY>BjkiDpiZAy*T zDe1h6A#HcN`ZX?k1izfL@Odl{7x2%&%ecSkyu+F9az)3A(e{o{0yYVL&Ka@WPcmzq)8*yzmytul0 z%Qt0a{0Zc*GB;l;rcBzgUZ&rW$l{9^eB4XPSX zBHT#w;?u>=N&eB2K8?InkD0MHv6(2%)9?)@$@f> zrcW*7MBm=th~$n9a<%;J8eWfG;xFEA<}mtd#LJ(2gy)&3qnNO9nOa*lPP5qfe2bHf zr$7d)xHXBlmsxasNDF+ygz>^j;cDf!;pbCFt2s*_?0w=%c4AbJrg!*wo7o|?Jg8|$ zOgz((qH8?ovjs}75Z`e-T57*J(^>!E(*??1LJTo}pM-Ib$v)RT*E+ilP296d#k>=i z=j&`3BdlCScpuq}cB~Xi)Cinz7`m0j=G%(XUm`JaKreK&qQe$ue~*9oZ2{eU8vZ<` z$TaIzsPVH8+G#Biho5^L@PP+cV-f2V(@aogXF-JKb8T zrZ9vhYjz2CHPHqTnT)@QQ#v-nz`R63q&!xmx~*Q=mm#Yk$g zW-Jsc*OPdkl@#`V_WeLR?wjfkXC0o6j|46gMEfV1^Yb_Em~aT1U}c?8UJQ=PJ7yhM zf0x_C_2BvhL!IaAqtdN2H5aP6l}Y^X+hr(1T_ocIhL6G@7#;NGGgGRwtMOt1+i&fm zKk48UgBD05j-qLuF zwwY7T*O`T8Gp9S}8Z<_e8kVA>mYS#g=Li(dXCEs<>4(M@9?U!+|1tbiM7j3IuXc06 zpDV4S&9{H8v|G( ze{pgO&a1J;wPvz5NvdVULqC9nzgN$0B^1wV*jB6?yWsySw8DKlNB!BWTMZE@=VvPU zD3HQAPSeJS#-?*BWt;~tj;H2L+Z_3&^mc=BbHQmjCaJN%$%L_C zN%KLn8^3O3P1Nwc{tmt!hs<3|$rF2{tF=!_UyT@7+B42nsMI%K`O`7zcu(iR(<{Hy zPOxi0H*0P;#%bjW#qfLC@ud%5+DO;+ru{Ylu>1%bLHQ!wk6ml=Xs)o%*>dK=Pw$feN+c;BsrFrY78=r$_-p}|;)R_DnuGBV}$`X$7^=Tx%iS#e= zE}EGq2lZx^8Zp}VYH(R`&F^wpoaUCZsH>ToEsrTwthA5s4~lzbuN8(UvvkSZ8E)Yu zP+rYfKYf!g)Z139bk%%hhd;+}c7H_3Wa?htG8TaA%x*a4Fqg&fI>{ zHvE(=d#{%9uFW|*pF?CX%x*a%Ykq2^-ldR%;w;pyd?(Lj%lAf;hqu}PYT_&QP{04e z=~i%M88WSoaTnT|Y($*O_YfBC`CG3ICJ=ageP(WG8F|pZOv5R~5ph2BkN9k3=MFeq zY^|3G+_*hq?BfkBXrA4QH~zr&rtU6-^=9qGU+%;;Y#19`vY*;uyYN#aYthQqn?Y0O z6`7)apV#RXuU0sJ?*%%kZ^KKmeLu3;Y{pgYwA~wwnQUzA+G9&TSTOtXSH?MMW{yF= zYURJYE=4r7FZxxUySsj;v&qA7f5Md$56Y?pTe83UcDG5M5o6x!^{kb+*RJSt*}FHF z8}k%|8EaZ@p7(P~nfEfajq&I$POzyKes=BQsb`eIqT8R}1lH4M%`pz$nICz6aF+7< zX(p*;Uu5@imB+L{WG7)|kf;oa--yZ<{=B3pF_Mcj9dUkG;S#7!?s~*@$OG4cHK}7m7Eu?jn(^DJCW}cad?|K_uamd1R~MG!@;IGllb(U zJg%@}ssh)#UoJ(YMp>sXrh7==HTACdQ#am~Pw}j{S%pKqypPHj)U_CLqbfw*UJAcw zm12!&I=#HxXQ?;zX1Llnhd$GVTNH{wPV)=eb~ zy|Jr*L2<{$z7`PM7e)8hV~>de?wcL2WN*X~hQ;0Eqt`Vi!lO$cMF!kq+W2)@dGfjY z*MMuJ`_}2NY)GmH+j&~*WMpG5CJ*1z%VHEPkM%eaS3TI@o~(2_rY?bDWb;m2{JLTN zDAMQ3u=v8G&-22V%+;pLU)=T;PlA*7n%w0drJzFkxlrKCk-t3gB!N_>y zC$FYMH&j<@^^@US6I|qz?@TpZpSaRzb1AwIyHSG{#=d38K`ukh)PWHRupJZdS*;<|COg~`22;VXM?|9z+54uJu^iI0-1H(yk8 z`gmH-@!bUFXkm|d?b2B@!tMHA!uP$=+U^_@@|Ge~3q2B+a+dUQV;AQp1b+@3w-&yB zS$U-EO!L;6Lfxukf=nEP^5rZ3<8)p{Mz87Q-Fl04?=!LU%S#ro&<9yIsF>$OXCu!Q zIK$m$yRPnZj$8ZqVYo7S!3DW02Pg3yXP~}0gxPqbP~!|Q7+FV1Lr01TVW`2sDI7J< zZ;D3^AwCLfT;KzjgovlmkxF6$YV3e=P~#~Ce9ZWP&mjLf^ir@uG-@mg#GppxW)PiI z5ag382r}Ft6o>j`3!Oj>!7VUq)NcVJn!@Gi$fR%`Y7~hSp~g3%6-j7#~W@O{$2 z=#d7p7|BGSmmbN0pu4sMox8UKS&jwQXl2N_>4MPIpq6s(SGrr?sI8E~#M1Leq?gMPSS4witT#c4F>77O5`X$g$GmH@75 z6@dCwS%FL2tih#HYfz4;4am9B1~6~71wMH+gJ=if*>=e&p@co~xnvL8Nz4KGlsJG( zLVLkpaeZ$ViZa;;X8G@Zz}aO#fWO-hqB|b|m42WZzK*~LdFg}l_&5P$(h2Z*9Rxwg z4uW!=oq_S1X4tuak*6*IZsB?aC2VyCy`ks^7EZkzSeqK|pe0(}LE9L6fRSDgP|hJw zQ0XsEu;amAz$fMq0hT>vhK7kbpbn5}R>(5cM+z{v6k-6IkJ7S$D+A$9aD3U4?Hc7ff;K+vvZ zK;=Dw;jI7sWee^KRG?75{qO5D>Pd(GKnWNb(U0dGun$f<5>TVfLNMv zYY-n=@=y?@+Q^Htkg!7buNVAgi(nj(&sr8sSS}c_7zabDJp`0x2NnzOnAsO+gu(p} z79+SIm`|N5X7mo>!~@9ngMauu-GovrV^PDOgCQFmKGZ`6%LBj6q3VH<9{Q6Qz*Mnd zuu}-6=14?|)v!FCjuPvF5z;W^Lw$St@6QJ!To(ew=?Q^E;vtkq0drafOI=-Ht|S5; z2X6@_q7$PT3W+511C%0G^uJk>qu|z90)8u;MnhGHLTcp#0HuV5axr3#_eBy7Kt5}8 z-kuQ#Vs8$EL|Qik7EDPcJIy@c*y9AeE*wBZrG!ChZGr%WsTW?e?=NR0F0~8R#@+*u z&}e=mG`&J74GB{&^-a~gv1zxL54&WZvqOj%Dc*bHKGZG(#= zKxK^)klKAQK!d5XcWKW_dnBFxf24E(-Vh0Bwnsv0uf(7cfVG?+S%fB*iKx_eO9_F92_;Lnl7Redz8{Bdx47(rxeE1<&Ey2_Sw8ZL<> z;E%%2$3Y!Y#~~5iHh{uZb&CMII6Q|mYb@MLLro(n4k>`b6!Bg}+BVoFih$37b)rBl z$0$gRT^dF0z|_n*k86OoU9K&b0@u=LdZHkaUo;v_%{)z%x5ElZp%L(wXb@a88WQ;? z1A=49bKt?TMYt}MfRBRHXsGIFNDVIwP?+*`kQb$_kh!6D%-WO#GbkYTW(uS>O=H27 ztEWjn`v}7D=f2_v2heCz5Sm|dXfjHe`YG`lq);iSt6*(1N$?1b<~Kqkq5x}2QAc7R5g8Jo!4x#hYxWqmE%CK*3k@|C1Cf;#0SZ&lx)Lv6HzY9i zyjfer14URN790zvv5<)Q4#0ycshU@OBm6XqKsUGpE}_91V@11?M*N7Qm}Qu~l@NEwce1DO}ZLFBzE0EVfXc-vu4 z>?QwR1)ihvaKuAuuBw0sQ_1wxpJk~{<^PA046t)Nn8qlCCPxj>U<#S8>3e|snt^%~ zuy#V^;NEz22deQ%*+&&y@HQExQo$4#c02*$m0_I|AUN_>@RB+}U`n`(;D&4ei-^$x z2u$^;2)Y>!SU3R)u9*M{9?%33OrcgG)0%KP4T4aR_iF(NrYNx37ia91)~N;K6VW!Y zPkuZ`RYk-_8|6~PRE1BG@_V&Y-)h500hDx2scRMLr~{yw^1O4L+e6*6=w9o&ORn0Tfdw2p=s-J)8cV*4MhQ*xg*QH*VPOh^?6DJYVG1}o)KNv)PPi3tu_P=TujX|?4{%{BdqC&sZfk_+&kc1z4^}vZ=GAhAC=1s`6Uf%PP%br0 zW#1?EhGEy(z6&k^T+a=l#?`#ccLOd=sr3^}+>!r~hojcHw#M$=FxP3&Y}-#mBD?ef z52o&W6xG(R&UU9h9D5oq$I^7W2Q>u|0|NlXlo<+?eXc0M*AhPxz0K-(Y zWA}z=>MT=t)OE<`-=FS1uuBqHi_uAt=w3sVM?oG_PS4$;OmIskLFmOlewa@^@aH55 zZw{|J1L;z4-|SAb+f#RRPvo;Uey0fyV?u*rKC$q>`B_HWcGsrq4!b0S@RVeTZp;+UOGfuS zzN43}!o?{BAvZI?js1)Q&mp)GGngX7+hDz1R2pL$)z8%3{YSlfkPOfqF$ITX5uyP*xF8MfE`!a7ku47KkfKzKt2gwKYhGoaO1LXV#mwA#bPXLv<7BDb6MBqPQzy7M3&ID&_mB|OwIJa4wUD~*sZ+3a36K55gSlS6 zZjkJtK7UY;@3lZLczZS|#5fxw&mcz&nh$2X4XK+X(e7T?@&v*~G@eF;=Qpy~qCA-G zXMTLngnA<#_(wi*FxNSdkK8#355Y#~pw)fg!vVE3)Ma(_56D&IC`4mniVv3{JiFlr z8m)W|B-DlMD60_c#}*jz!INOw^B@x{Bo{gGQ3!S)QXzD3@qZ!ShiMSZ9;8MQdiIYG zrckSykYVE-w7n-vtggW3*#zD-<1OH#AXxhgZw!1#sLLl XiV3&mLv%ln!Ef?6GX+yu5bpl~ti1{Q diff --git a/src/client/images/walls.png b/src/client/images/walls.png index e799bdaeac81745a4060d7a75ac11450f4eb95c0..32e72d8b4112a1d9bc2aba3d1797adfed053fc67 100644 GIT binary patch delta 5359 zcmVxwG!OZPf5DAf?X&Y z*s${DXXb59nHjqxT+IgmUndPK?f$LZQ9gY(6`qxrIi71w1p)Mjj;XLZnpEVW5Gpk^^@X_Vr&)swAXK)0tYtGR z+}mG1UW)-1Lh3XKs&K_d5GX}P2&p~@s(vD={}3oehEW9pU1?@@FXQ{!Mpf5?CAv@0 zWI+HBXWH3`fDjX+od^&&=tQ8aUx`4nuuqdAMiS6P#EGDK8g=3Yf-S;kkF5mNAz}eM z%MtK@dzB8zAW8=l(h#x=s_e?v>uq~Tt@0M{oHFE;Y(zjZ<7u!r zS2@#)R8B>U$&I_nNfbOk`krftK8ToSC+I>+`z%kFko737BMyfEZySx#_0BL6NkY+< z`~E)5^U-%bqCU}Qu4=aFLEVLtrV_}5Fi84;12U}alx4EfjW{gM$a&e^;X%9Z<0~)X zB?9!z`{)B$anxzB65(8l&9HTbm0d=wH31(1bv_YFLaB^%6-1)E6EnrvN8d#NM^`hSOm>i}n8=Y*W9dIYBndN@}hCX9R~R%^_3rA$x35D*qpxQsM^ zBKRA>{m$|J(UG`ydHJ7mS}8RrP%5>~3M71_INdj>JjLp{r@jg~5W`d3Iv@AO(+X6k z%SU1q=iBG@54n)gnXsp0&l#BjJ1XckqT5nx(>CIUI~ z{O{~EVp6%pBN-jRA4CK?CCEz-bO2fH?6hEARH&Os&EWT{1oyP3r@vUk;%B!srhD4< z!s>C=hTvWOM@{S@bgPit?9_SP8!e9?%e;K!ScGIQze517HrlgQndEG;3#N>SkbXc0 zJ%yOsVU%<6RQFFWYMzltL07_7>PKlx9*kI8qQI&a83UE(PA&Irt z?B1r_jD=v=QDnGl|Iu7k-)K~AXhzXhn~?k-8>cJF(H(G*al1#8fCoZ<_3(4gM7E?Xym(ho=%^N*xwo4(<7xj zY3LP6J6!bp{`>E5Z(}ASL+yF1{CvVO(!g8cuKlaPsPfw1r0qU}DWC9B{Z(4heSs12 zI$NCZE%j$%?YqLyMzP|5fRUY@?b4bNU`>7BhS!C??*gB)`pnb1PZ3c1yRUun)OqE% z!kq}Oq!Rp>KmNoKFZ_Jq$@ zKm8ZSOL=eq*g1#*^126H4^;=%urB54h<8j66s18&?>GPU^lXs-htGU-5fxUuM2E?r8esIH5?tUTpoi1RM37G9C?oLJPAY{M&soy;UwJlxwiU4XzjU)j?@e~hdK_#(2L`VWS!v37K z1b{2OJ%0vB>sRf<1*Z-O;ZOa{XOC>7OL^VfDgv-yvN-=m1ayJJLDmWJmv0?bi$D@I z?}2bwPw{D?!ym52OePIUoHkN-#wx|GN?d`Gp7r?CH6a!3iRNfB%)&j#nL5e_dG`a58|3>;i{27Jbx<}AgJ>Y11mwPulKgW47t$Uy zRbKaiYgZaX0D0f2sXi%K!gKVid!--1NVyrL!}7Q&<0G!d^q*hasLY@q?xXKS5MpTp z35W_|%D@GuNYDpJ3t_c?t7j{(duhcq@*wYy(un{n$VgTM5KN6E0jTRlSWwtTxv~&S zdeI8xI|4wUjsS>O5&-rW7YOk)4!D*G;6;u^08VfbaP|jDZ~v|$p!S7493UbPKYS1+ z$mn-Ukk{;B)oUw3MqUF1H&k4>r)QgBXZMkvg`M5IdrU{kr(ceL3(b5XU1_e$3{u}k zu$pZ;JYk3)VzwxQ4nX;(Emz?WPnr3!Bg&`D>ylgwImuZPL1AdsSD9)yNXM8G=VS}Q zLFk+frms;w1HzW_k7loIxEhlWAjI*csuAd>!W9xZ8}x}#&Nd0QFmlW|bM%?9CKu2y z<<5xUCd|3P34r~7N24YI7#U`i)$|lDNfzaq&Z6#zKmbO#BY;oUD*|x;i~s`QCwoUy z1Q<3kX zdwT9k^66nMW?jG)C{1`yXFaTyayDZ@<(Z_Qk19p!G0EJM-wS96Ed)^h@WyYQlTQpH ze~SnZ%;4Z+^4AuDE~v6b1hTya0j{A0IXsDLs}f}71=r|bQwdhS{~iz6(| zywepIkcW7JcUs;Zwln0NO>+ci9N?p$1WbgJh%Ud5Xu@ZD3!+teB)MQA0@>lTlNqX7 zqX(Q=Gp{$~ob+KJLB$;EDsJ?*JhY$JVeI+F7?w6)fcn7OJx2k>d}*7~^8 zmB`;Pd-7R-R0b_Ge&2~unn8#Maq<}|FZo78OO`7?f!SXA3M%{I!LJ|A6O_;ToN&{9 z@%DrylL+sm?s=?Wv9cPYPnl{2I>KSQK|B{*y$zMAc8P%)`vbbg7YJ1nz*lA*Nr;g| zszk++P3=qF_~m4QH|6O^OWjdCX@F8^s~E3wGu z3pqSFv3PO{He7^Ca|hx~nL82SjI%QlSgYi=D9u!Yo%}x;CAg>OoIF_B?Z(a-qQhAa zghg|CT5hxXLTI3Lz>b>&WHD7X*XAqsdUW z2^s>h>|PSU*XAn%sN*bpBpjqggpL456ZHWRDgroi`mG4y-wdn>=LB#r_0i{RSBpdB z*NOnsNFRMfKx_{Z=z%RFfNlW!j7R7`1RzX*?*tI?h(U4zj-4aF@JTLFf}X#t5_Ct2 z?+kbc;Y_^6YF$D|Lx6O|JjgS1%J%eZ({~U5Ic15_S-)$~0q(Ro%UWEWmgl;QYhH%M z32F`r@bZnrB``-Icai5rs+%*Q;khazjGQZoaR3D9xB(<9WU&mVGGQq|Kpc>N zM3@mEk*^5Qy|3s>mbya@s3N|w_tA`ffM6oWJ-?r}nm4toH%c(S{-GDQ)4cKu0{kDj z^VMuOccU(*jzStDq&Q&v`GQRK>1x3-W4S+I_UbCj*-nVut?G#L8eHY3cU(Zf%Ba*S z)OEYhzS;uA4ibN_CzZ-*FK)&gMshlTljD?om+vYh=Ul-qm)#H8(_|i<_tkFVhqw+HaAOaM1 z6M5znTtJj=W414w3;8sISdT7f<7HY`F}J)r`{;psquhz$jt|<^eE?wH^tuWU&2<|g ze3we)O@d(gLd4{gqYyuTpY0EFC#ia$;o_8Ud*+U<-Ns%a>0~HB9g0(>*4EF{rLw)7 zOFo)BsonmRH`D-K_p*B6MZ>j81jzE%&Qqb8|FPQLRBB>ue$5 z;z3@abfg@Tvtx;YPR-&B$B^B?7@d>VWFxk zq&c;*S{@&Tq((>JU6LgKn~u%P%@G-K$-@<@(epKh%F)U91=hy$E=~Knfm`L?DJB+5 zmb}k5EfE2~yg#%4t?BvD^w@HTt7__eC^64%d&zUE4qM{%xWe$DFZb zHn`S|z|LFDPAaW6Iw1R(BAIX}#%90ZAw<9xQ=a;K?E{ck^>3yGA3J&fDwCX6;9fg( zZ36l67=BE~qX!|<5AdTc9quw%o$u{%^4BC{_el=VpT0zYXVdbjVq5D6Bs}Y;BT{*p z%pthE4L=&c`W~77YqG{{RQZfa_$H~*+QE}e-G||sW;0tA;zBedPY_XMR;^b&q$2dq z4gQ+_+WJCBNP{5UkYymy^eZ^n=~v~b8AL#c!3~uNxENe@vT`jB$m`LR;GP~ZX{qfl z*Ht=!`M`#g-x3}fZ6$#A1(XgJ@_~)b*nS>}n5(^OMki(Pv6B`PAAj$B?B`EybLk!g zV8@4kyYmczmoPfzvHkn_>SHy_y9Nj3L5|&LJX*`*-|*|c=XVWTU41d~Aw{5_WPz}= z=r!l#qxL~WVpZk2#P(JGDmviVo55$FSeVdEi~Rq*_t9iX@iiS;?Z5f{?OopM%g=Un zN-U4X^RW6XX!@NOpMO0CU6o(d;lNXV$ph!acK`LDqY^JIjgTL`)>dtr8kO<95Yi-v zV2dU@x|fq7w)&kd@cKu}_(-}>hB&mG0|+33x4|C%?rjc`-}<(PCvhc;)Hzgr7gE~c zF2sdsPUqnQl{uU0`^fv(8C?Vt`Q(7y&!3&=e)U@0mN1*|&^XZW1i)yfG;ghw{I zI>Dvm2#+&t8Gq4H+^}+_X85g2m#)u0C2_b}hhq3ZZpkum$;1`J5}{dx)#o2Ck`vugw8l6|4LI`BLU8C6QKOYyBsk(k_ky zi?4)IyDOV^A5iiA0VBtvg6FwIUfySR-7L`eA8cK?Wq$(2CQR~IBhc25pk^H*wUr24 ze0k;q{3?|8wk2wS*-*rCS}pHw^%#J6%n238Z<2SeZzJKpX66^m}+1d!E# z{W_~Z89TqGPHwbXLj=$JPVe7et)0fYDE~IVSP~z7|`-{T_J;u+}7=DO!%ZJ0f$tvm=+sg*fK{&JH_q1iiymG`Zsn51m&?`*Va0 zR$vVQbS(&=mz^CsM*M7~KmO+Q{rqHO@AL?H@_$_!XMYA{>?I;F^EmhPP>DTB z&z1me&RV-E3o|w&nzQ(mcZ;_YLGnH-n^s}XEc4M*?oFI=Kt})+;wABhC!-TO&FyBa z5^w<@d504`d1Z;f9G|P=03Z2ui`o0|%7{ayBdYg?K-fnf1)1lZyz)foh_X8pd)m{U z_Oz!x?P*VY+S8u)w5L7oX-|9F)1LOUr#1RJ@t=fB^ zd+vMh+qVifr_NqgwQH?f|7un3+BY{dZA*v${Pe-E4!)(04uAgL@Biqa>k|0?{qye} z{{3%1cf8*D%4Zj4p8xq@9_#(x*Z=-_DX)8*JE(hK`=8ermzQ(+mNqIl$aP4L;EuR1 z=Z!c1uCgzWihx>!|>u}2a&1XJygeS~9S$1xP0D7L<_FpH!CK1?@lC`$N*2*|r`e;?`pJE_{ zA#CP%E5Vs&dRRZ;8huRtwME1>`2m<2uJi-^{#qONL6e^W7k_K@uSEd&LHzk3>=s~Q zY4D`HbBW*OKg&xvosCTZ6N9Iw!(CEl1AFWZkX} zOjN>LKE1=0D~v~%M8HQ85t4&9iNHhp0p2k@HCIw;$19H!=d2>YW+gb&ha_EF!7daH zY*_j7YvyfBnHjqxT+If5{E5#WzV?yV55M{Ae|Ef-*S*b?P68T3H-F{TBf|Ri{7t2d zIw!`F%yQDc!1b&D4o3-j{c9w*aFDCY=)lxtwOwfxrw+`TdCK?K@L zM`=xys{&SkJ`^Sogdv_2W~QyF(#YwGj$Fx<*SzO4?y|f!YU}VWZs>X`Vcuty@S==> zzx~5+oTiJ)r?aDbul&__4$uDSr$=~dY~5p$qcOq2?s(up4 z>oQ|p5I}$EmYO^?5dh>sFoUKJ&-(hW{t5X{ zzxny&wHRO_q)vmN3Ri3dfl_3Ikm`e=>L-%=4}nr-7*!C^m1b7=GQOW}RCPUAqWc6* z76brsrk$M#2r(hri2!kfP6WF8l?WsY`!pG1BmrGSoCvC?Q72v?*dlE9&`MApA{M~2 z909+7SLuKZqI57J4I!(b%1jeK^IEeXL-7WtVd}baX18c+h~lgcZP{b5{kCm z_xD+zkG|^>^@%=nRkKYG>MoQtl|UYZLDC<8kYQz~ER&6H#9?tp&dcTw588DfUwIKP z5ujh*M<2k7qfUdB2@r%d3HS)8^NCOrN@bj@AQI)Bm?^$K`Yr+>j}=N6Y%m0+qN~t-4QmJ)TAmJm$>ApebDOS%t^;O7$7@peR`M5WpR-iIn zJ`$ri-<;dO$c2Q?gmq=Fx%iN)#?|6#>W&PFjn*!QRv;Vb2;mLn1J($+My$@`tL75b z!pBg{Z-C!qM7Ki1iIffG{VEpV_ws*#j$XC@z@4pBkbV!PTRqRYXfc3ZU=+DcHp-Fj z>Q@BzGHbiM94SXK3E&F3B7hTdK>%kFABB+&C5w)@z}v4nP;I`b>Zcf7RRq>Xc(egx z%jSr+`l$mt4yfiGcUFQkJ@w?1oN5!%aUyfOaJt1#%d=DrE?1aYTda1Y=jQ7KOZE}0 zlm7)mf2tP0S-vxnN_e&Y8UaKxb*!_~jywww{s2bQm$rSBA%?@9KxGUlV~G zdH#2H8ZoI{;*pGw;4ef3IwiNUg!|RSC{C)8k*PVezwD8q+;( zdtvpsYD4g@{(~m=5V}>!ZFcIs?v0kmk7b^}S$0A)m){`(R~zlwt4wk>*#%QZL`Xj% zgPuZ6?J&x@c&huS7dGB2t1`KCPF;44wxOv}hpX4p($01S>w=u_U1DY2Q)Jzr5!N#t z0l|*Q8Z(Rhy9f9vi1C%h4Thka4>QlYIw5f7VuPJ0fj) zr_e>j5zGx36$kll)6vLx?>wD4(NRYad;iXi9Kltm99ud=}d{t&Ee43+~A}LIy9ilQLx|H{zakr2q5lgd zd|R&~;Ll$Fm(#OB{$D@&)kRcT?Gha(e`8We>b&Va)6Ni`p3U~1ZrEl@)ZHpkQzw>h~g<8&Vou}e~6F-aD@Fi zTL}PHdVBs1kk+r-g$qs{5W*k-<*S)l28hMa+N9jZW6=WnU0tlu?k^t0oA}lCuqg+`C zCB0|`@*M#nP)7hnD+vJmiwlJK83$ZT1n?q9A^<122srzLq_=-p5m5U=9u5!@h#$TX zCCKP^N|4v=VAX3YK}KE!1UFP%IMb6&u(SKf&ce>_-94tG4PmK?k7x(w3|6`=`vj-x1|g=5Z?pO8>C}QiF2|A z;UIL*2GiH5o&jM?`A4%?He8L#2N2?TQq>4_Q{f7UoDKR!C}*1lTNpWJoH_c;Sd$BA zmvU!Ba1-X--~_<_f1^>80E`SX%4&KFmn4hwOlMK|Lm&Vn+!4U1>JD8P7PBtk3X~>1r?Vc`N;z9&LFJjGppPm==`qRNliUkv2t5Q){_xr#o|8-r zB7ctv5X|7fb3l2{oMbA*-r;8T}h-OsX>U+)i~ zLq69}0)Tk6W=DJKxZp`75X!*HXd&nf4hF&?*Liwtlk*HDe`}-PaR3NYH;>h2blto; zCwQkTE+7x_1n;!GJ8WmjJDcVRu5o~meiASdP9nPeI-&_*(_0X&(j&T>{}7VoW( zD_x2F4YMboe??``GUNB12&EZ>cn~L_q4JV%G_+*7@)MZtrLUl}?;rg7{yahXtj`HI z-4}09NHU4=PU@b=3KlD?G5VCLMxY}cwj0EAvDMp9nQE69h_OGQTYP~~B>{Y8#*u^= zNu)|t9NE;q)J+axH5mk}keL2Mpk!Ym#QuN}zGL+Ee_0s_R60R9O5G@TV&d|jcD53W ze7=ywlM{<4r(nZHs5EyV&Xl}%V%5FDy&JZ2W zdLS&C%j0TKVKUlRzSP8nq}A!WmZ`*VvG&F$skODYlpm1SzJ2!YdsrKU6)n~UK}MbL z{&z^~fBtB$fRc8LwoqCuiTet1BJWd4A>wc$j{R0XcZ;jMf~ydsQnHR*etbbN2t1k$ zb(^3e0L$(r0eo$~B7i#1qDR6(T14mwa5Pcx5uqZ0Bd6br0RGLuif~Q<=TaYizIL@Z zM1HFXFpc!lM+C(7Ab}p(BLe6Kkk5F8?n3~=fAmfOA&(d&7vR`A@(Z8j5+&&QyDC9< zl=#kocM#6RTddY4gfs+5N6dpfYfjlrPd0t$@RL=R7@hUI^&H?%i?gi7)oFRIySV0M zSe&5dkO0qLJ6r;D1acR7PNcdy0~(&IBErbI@@aZG4-f}HfQ}nLvO*Tia4Hj)0tCbX ze@TQj0wnSk0lN1UUCB~+$N^Qv7xq4yvG)*6UO|BW zBX_=&QkIp>2yP@hrxnF0_2 zin@tB^9e2>O1ClFm(7KInnA2b7qsy*t*e+@UY&jPK)q4!L~zFk?dm=Nux@%?5QXNt zjS#*|rSc|0uzVq6<&&QfKYw4_ALLF_^*+PJDc|C`n&(o!{ zy_-uunmnqrH*TQLxNPQ;SJkJt{C}2L-j&^2{oO?9%JLbV>eyTESI6e&Xr`jtfVj=;MlN&a^oo0pp-GUAelD^#QBYYLU4lkW>`jpbdM=DC4;<=!bK z7D|@9&o?a*0l&OIYyI2O|6y7)6Mmd!^?*y{cTXLkM{MaYAAH;OtaL0!G53V){~kHU zQ2{9qLiH=nt^co{<$nk#H|*`-#isMVQ+~yAFMQMJkM7+U(fl}EKOT2$|H%8diPkvg zj3u+dt!4yv-eY!BX>HK~*}oLYggY^I`vosT1Y9xYsn6Fw0C`jY)|B8wC+}ZnlG6&@ zYiF)aAU__%kI8uOAVm5Bezc{-T?VW3y&X>enndhA$>I6amw)JNTE42-w)z1H&${V| zR9+@?2rh5KkH)XQN2dRptT7u^K4TKTNourq@Mu%_VR)w5%vOcC5Y5OFL{yng>lH6j z5&Gr^f6abteIX>IK@e`pG7xC>D>&Hcm*uD#L_mna4V4JE7+iI-axD(X>%o-ZOfN8L zsqHS;RXTzBz?0b$9~tc>fc6EH4i@r(jm_A89*CH$y<0{nW$>Ys5fdMOAOF&?o!aKo zJqW;#5B+xM83He1bjoA<_wm)oYL<5m4#J)TUeo==5Px&PeoD6W%;$Osh4bB-P7h8K4*5dazYZ} zk&UiSaOpV0;|zO$MsyT6tQ@H|{5GXa*XJLTINWUU!aA?ZZGY#LjqZ&`^b)zgTAS7O z^?ZFk;ko{va5_+h&^j^LgZ!v`&K2@K#La61*VMw-=77D5)&2i`DRYyONGq_n{-aK5 z7e|4`mqMxCl})=3sQCVXkz-N8^W34Aj))@y?fnSqODQIQGtD&iBQ9}eKa>jeKI_c% znA4ukiB&YoBg*Z`uLjremXm9Cr!H(Y+F7Lz(JAk^6UFZnT&)P>bBrVcbuu1tl|&FU zPk%WP;P#Z5T=w>k5;<1B`m`=EI-il{TqM*1VKufCt3Z0wyLAy2+5#+pGAg4&$jIKw$f0EKi;!9NK0@{^2_X$inGr%p zM)v>cx_rL(eRusHfA`}&dU;>(=kxV?KVPr+x}3Y6W6IyP1%!o0DT>>LsTy$}~ZXdkjIn%D9Tr6uY;XO28>q zLM~E*cJ-(B1kWr~)l)f_uxI!LOA>C?d5u<i zC@MVz+gLwij;(Kh_F24M=J7ry; zoTzzlGo^j%W9iTf*-Q1ox#3k$F0P0#JC@gdWv$p>nX+p9yn83@OiH!a$J6_DpU?f; zNNE@vY3Qvt{$<{1TYQmivra<_Ti4S)wcc4W>gy<8ozm{u zyeWOAx(7(vm+a|YU#gFsnmwA5($HD|-IA$z@zX~4TCR-2@N@0szr`1|yJp&dE&qOz z;@KSCkr+OFx1pvnEwbZFkGpib(D9x^N)K!e%P{rcC6nhbMo)J54Mi?28>M;{)ZcPw zF1}ND@|Bmtyew9_;*}xx$lOH<6_%2dFTT@6sWaO}nSELO!gFKcOTs%mJe zKZSO7I7625A$JiV_QXz`7;5VeAV=k;ZzSVQ&NQ{Fc-sQK1@s7c+v zgc&<4>BQ`E%@sly zrjWUS8m18H4|60xJP6n70=$Ri8yz!E~@$+n7mi$_sUAF4mZ3ld3@09I4 z7`4X^80!^Mj2NfpuGsUF=Dyo5;*3={@-GUr*IORFk|q=9?p~GD^Y~-u)4OaLr&B)8 zuX#6rWhtr4`ReMvKGwI$%CRVy37S zHzAII(36Q|yAgn}LIFd~IbLPe5Jllj6YnywVC7Y5$TX3R#JrS&fdQH4GRus3sRN1c zE741?UynG&8Oy$;ehPP5i9XgahOEr|wIVN5rMZE|5?zcYQ5oGQOQbr!cc~0_RGHMp`;E*;WxF`E&ywu#zU;39afcotXPI`z~{b)wQlidpvKp*#%3MdPWC6} zBgAvsVT~_zgavP(kBdRuNYUjIFQ`o1=W@>q(S=tWe2HCV;2at9^n>T;&y3&57pE{{D zk|t&olg&t;i9BiH%*A1zv;<}2E<9;beu6VeZ81+Js*5DW`j#4=*D{sVGL+In?){LJ z5;SesFih4&j_~+%`}lXV&ZZMBSy-nr2M9`T$1F>fY!;RWqqy1L5wy3WMS1oiAdc_dZs8ifyo% z8jMzkv)yy7zE*6o?Ks~zFDiwp-zNRXnS&62=%~0$c8mafaQu+`DyG1C9D!iMe<<+B z4|_8&OV_hP&W_duOvk^^gz9Li9Hl@VJUObSs(2ayuRH=lfFL8mTZGEa_nZZ+)O)p<5nEuv8Nzjzs_i?LG zugY%p>%5IIW@mAl%Fkm-%)xzWarf5-b)8Va{%;Q2w1z-j)j*q-Wvbx4O8#~2voviq;=fW7#?seUYy4Wowvx8& zB11}62!%zBW=VhVUSr-+AkuWQG?O3kke?-WXL(t^)SZz0qSJ@DVr!7of17>Jm*x&7 z4tMVE<&j!N=c8ZGY`jbrPT!!~+o$%!I;&PBsTOK_umuhq8Jrp@X}ujXV!>cR}&atczvd-2b#j&%yh{Y4>j|B=Uza?~pxarfHR?&TZudP=1 z{Jt?S>Jx5d%KE#*rQ~`}qaKp|Z|`r)`p$iGV)dIn-sI8{KiK$@TBpMeGpDFCl85a~ z%guemJL5vW5+&RdZ!sBK*~>Rg_&=ncui^Z(yW!hU0Q`! zBA1-&J)=N|pZt*RZU?ohVNf~0Tw4}ahDsyQE2uhP=LNxJw|_`X5t4CZmb3<~*E22i zdi>WOKj+nUBKZ?62wFdWO;)mt(mZd{2XfWXc>)+$?kgt0(z|QASBCOSUewn-nac_E z%Ft~K7eVf=H2Y1TGrlUD#xm@)5Z&Z+ciCXyBQWpPfXpeiuDs&tANA4u$=bfN*weRX zop~-l%>2O<&>$rGikM(EIH~}Ld3<&92@Sv4xwVHiKk}|Upk%-Lyrj3_7Yl(r6_M!e zA4|n$`#&;b_P>6)DQgl=z~+2GC_NWKrds-+a(8Cm~Y?U=OOR=QoVY)Fzd&&&n2?bF(cF>AafXe?DQ z!ihPuf2~)TR_#LnqwPJ}?qB_$GEZgutxIj6&ngT*jLW5a{XkfCi%_I^KHl2G>n&PBF=ICW^Uf?UEb@Dt?}^M%y7NVC&r`0U)4*&<(n-rd_G^g{YPzH z6NMzriz{C+Y#XoMQ(VpMRxv*|{bhQcx;Ex*GOl!9>^Ph2$C~R#mxg0G%KL|=-eM^% z2w6B90(@H{Vnoe7SZ|6Y<}=C$UH2p2Ifbrcpwr5>XJ0fZM>HqyyR8=PlK!;Mxxebe zJN(0|S1Fue6`A$g;hAofuR${>E-`sw#Wnk6Czrp#WEev0B{4y&lJ7BPk@(Y?38Yi= z5BaLir-d2j&U&;-kxRD;Uq0@kt=PgA5MrqEzq5Gi-}mwU*~ugM@zm3Air?>yyGN!y zvMxAbR4QEY+;Bm;uV*lE9-SoESLK{BbCrOWwdB>)2CB$(5bO`E%x%YhR+7SX$W>i7?!+HK^PX z*B0h0O^vVSr>ORfZ4?r1ROaP18@`yZu0EIRGqm3J!{uYpnDMU4rFjnbqL?r9AH0T{ z1*6%z8+^Y7S_m~?M3jmTRp=#8+CRfm=0=3X_{o#VJWLugi+5YTx}kl>-d9K8(seeq zZvKSB#Vc7<24y)pX$xcn#FE4HFS}~;Uf0Q?i>)P)_gP}kb4mutCy5806b>J_6XGpA zLDv?wgE&qQqfI5@+F25UBT8TTfKFMM%qebCu2l9zsO#XgLZ3{2GVSNnP4K#mrEu2P z<_N7Cm>Qj|9q9QznyS{VKc`T$s_@Fg;rbfCHUYbLB}c4B zm6uYw0=d?#1fH|R4m4bu;hZ4*PJ)dHd*E9=dwa6pGhHifCO?aGB}PlPKS1NywNhqx zt;^H-J%*#&(Vs?{zP?B2NZHIVs7V>EZtra`Iyv1sg}%7pRkY*VcJ^J%jq%dmqL%!X zq0#IG+53DMOS-#y*WcX>pk2n?NL>3(Z|hSopYV@OOIvvNnAY^tz0sgS?8C-I zWX7|tH}C7TX?3>h%kHgw@S3V_OCu}GrrSxB+j~iS*0{^Sa-hxAtujxQg5D-L|4oR{ zl+4WUm7K}_;Rk*))H{@C{C0`Hy_3NP4ei#J`7RfiRx9kKll9P#jo7q@X~XqCnkt=nH=`(fd^wD5O1q9+9#z6U zcECuRg|M1G=Y2pWznLRwFix$Vyop11<-M7UGop~}yhf*BcKf42vaPskM-tt%1!bGU zOzP3xGF=(Mwnr<`R%P}zD1e&%<#Ki*?M!YP1Dz!EYN$@HIQes|uPktp0S%?)IV8Uk75OhboQ2BIi-kP5Z3WpWbure&1dcj5nI1^0~%RmLOV}y13otG-y&vZf;qq z_igo}NUly*33s^&mg_s2z-DWnP;*^|r9krtn|!cuX$BEu*|sNY{ew#@pvoQ}kkEhO zEz`+Bh0KsQ>=^NfN9FGaUd*Ac=2+MQP$+SyuMAj$AvNDJ?1F=AeP;=DnHfwLnr+VI8 zwWb`%&*PND?T(Q$3kCZ2=zGqXxL@LxRRhsU zwS}^zOE${`TQ%o0_Cr#DJ7*P%kR2Uh#Li}yOB<4CQH$dMO27lX$^}epY!%yy`Q!t$HZNe zH=QbN_<7+~FVoW(*Qf)P+`Nny_%xNbyAmJYjj6=k8x%?SEjTdpiA(H;kH#i}*TNU; z#irmY1;c)GV;YMOn?JF^**~MdQ}EhU-=@rIkE#2_8L=UhnS)Dr74gYb)!gJFpGs%-ZZCHuS?kb^+NA8l2Yc{mo8edSo==s?4GgHiiIhnnd7zmoDr!48M%qS5H1L! znHmBv0gLh@c_Lb2WmgRFE#4<_k)LbY zs8uL&7(X2?SkpE>-P3ENU*&R6N@bbEGfQ`86bfWZR+V38WqX*dtTJXC$F-jl)zjTW z%jDAef}ybgm)OIu{>}~JfmbU+m$qvIZcL5vonlmf)X;Zckd~miL9Sx2WOiS;=S?7+ z^);C>y3OIs*p6vhyRB~0QE?domT=uSGUHp#N>MIX<-;E6?5exX?H5@~wsju8vF%wt z+prjav-~T?O|h*kpADsRa#VxS9mZeeR`wj8GIgYuTZq>TM6~qYc%#K%B8Fk#PUK8> z=6Pk+JjS8e!f+*h%Xfh=#$e4UmxxWuYo8xT)gLpFa>F_xHTq>8y{2*9+ zTfw^VvXF`QMcE&{ zfB(28)?H6RI;jvfY%P7gdt!8Hu4&ry=ndn0XID6sGSe&qa1}FR)8Dez6%@_&rfOfV z>+SJl#y+RCT4xw0z10lg*>BkBw@_UcW4X4_yt%hvJTlkacgJ1*baeYK+}7#aTWQBL zWQdIuZhpXyw_Ne-B%FSEXMZg-i|&kIWDHy5fWE_HRKjut%{#7O)9_PLb%_AS^Q|<& zr7e}N->P-mK@ydzgkIKJc9E+Es)*NNT64aUMT^=q z_3M7cxn^UnewU~xmiEbUyVP9!_Rzy5@ylMX0P`?&c&{H!pwZ=Z@7kwcF)MdnXiy3@;13TrZGv zhfQaBmjK=I^!{}1MUxThJHw~nZm`)K*H|LkPid|gV9{>}qBE^nII0rJZuokANAB>) zuTOqQ{&;JDHI?i}jsK@79kdx&rDPX}D z%NVm&I+20B#YLMBER&T>e|Lyf;#G=Zzn#A4%Gt8OceZwZfrZ;ulf8;r5|a@-_3dSQ z6XT86T~;qL+yGZP-}R_^DNeWg3Up$}Ly2jEUMeXUqQ)0`=W4%EP^THFZo35@(KkIx z;4Vm(nV7~Rsk~#KEw}f5b$7?&*5WFe*NQQdHI~EzJINdoCt*77^jpAzJ;}#+$L?wc z`nJ(AD|9o-&%lD07qV*aRMmVS*z5J%_^~~-=;@v%altugr+A*5Q}~y}#;Q)Jj9T9# zgnjSzdOk`~arEPg-+*U$HJ!qWEPsl=SNNZ!dL)T+BfiZUo7HQeh=do=$C8QJe{RCPn8n^geyP zGEZi~M*IKIeB_68ayI#uFQAFRzaU4bDQPK|UNF7?kJs<`ckY*{^)5Rh5CA261ku4e zcp!y63^e#S5<%l7M+#`%;>-XI5_BYJB%(t=1I?8Q8Xa88pkcus4jR9><3S_*R03#l z@jM2NHlAqE(Bp-ie&bC8TLSswKm)~}3L16%rJ!LifCCNo)8(M?@pLF?mHh~%KokL1e07BzV&Fd~H_u%$u)ipT5%l;!0MPL*VJY7x`D1rny}LcdBcyze6EqzzIYY*pGo(hM3#5j$E2QC=>tP1npfK3nA${81A*W^@ z(4&11i08>22(IJ_^_ld9T0-tZ!E<{-Mw=H@Hdnl%0d9FiJgGhqT*?>HdEOT)NS}KT z!Eq7!LEfMGK`2EmH1QX)P^fYKP#@s{$ml&ZGBb_={`Yl2u7h7@{`rf}gMU1!IsD~F zAf$4BU=av3cnFD07zBkCacD3ELoMmS!C+^;5NN=4A<(0Xp+VrIo=_-l4q+8w3s*Q) zA`RibV2gAF4AKo0mwFCGgTpW>nA-Z=1T-3x zArX`x+kq`rhXz*)RDA6z&;<5Og~pCfgOc5z1|{1$9a>e1GN4gpW>|oPWSLM|mt-b0 z9qhOazY|ct`287+|4`yT?l$(8B0$C|F5s;T1y+%}(rPy?BVm7``O4h*mZWjsK=JOr z+>hlmn`@~kBdSXj(w#lBRLsebgo~U{KGLxxvk_mSiLqz&GI~0WeiOs*=vj1etN&hR z=#lhNKcTr)y2l6|4Fcpb#Q*zifA}B{e}KLx%wXIRk_1ErtDtJDR9FB(EH>R1D6XLe{R1KXIYkug5`jM}Aded0d$V9T+?0*}Wj{JR;Ly=)R_E&U?w@frjL2$3fc-fLWuCd>?E@@VGH_nI20|ra<(k@YNe6Jx z83}fP=;w!rgXbvp)9VllR;;t`>>(ZiK{*3b^+sGZShGi6Yb}7KN=D4o4G0P=mvt6c!7?yf4Mo0#hh>;RFj%Rc`ba2& zIxE}+bZQ`X_-|rxeaHWARtN6R3d0K3k~5wi#uiWyg*DdBjyHvYXQTBy_+o9DyYWd84ecuf0Jzj+I1-K;@-rhdMz}6nJ%(m*_>{l*lcWo(L*9!FN%x8_K*m+ z_}tcSsd^mb6j@{o=r%wRI5yy~V|Ir?*z#-boelxyyBOJ){?`vyJz%T>g^aWZb{fE1 zcvV4JbO(rSX5c!Fzv=#wMFjR*J%3(X_fOFvyBz?>MkuoIMwFB_{s;*IVXH4CLPj+h zuggIp{X6fZPQch9(QYG(s~W!xf<&;@7^}Me9t*hCFtFWnKI{l9BH+}7LQ=W_;Z0zL zUi9rK1a9^*vQ^-3zMunG4S{hyPR|wCg>c67QOp2aE2GqwD};l;n^bX&5W;6a-3@SR zhNOyUMsdmEuibwF5QQy0iCG<+KT83@Ffi5(O^Ll`6x!e85C>a+vs)Vu2UC!Z4gbyn z6zPSGr zsXzV#0Rmwq1@>D}NLn9&xs6HYV937}F~bKhRsNo-HTWiw2v%djr45C=?h8b=K~WdB zp`%>1e_zOy5i^9fzyz>Wt1%UKF1j6ba_Y#FH@dr-61ZR+>$(ADEQpbqa z!5@-Af3S0X^E0mQAWnjxK;%ns*}e2)p!!d3M&JVhq42dC-Ht-?KZt9GMkn`{nH3*4 zh=46Z0FNNp0$kdmiE=<-9tae*gDczntZz-=_Sh8&@xb3c0D@O2q}4-!T+H4Ftp-6UXoH zFz2IJnTH=O3^B>UlR^A{PG=B^68vKX G;{OA&`1Lse delta 17305 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 O!r|-KSsBPsG5#O+C9G`# diff --git a/src/client/js/canvas.js b/src/client/js/canvas.js new file mode 100644 index 00000000..685af4af --- /dev/null +++ b/src/client/js/canvas.js @@ -0,0 +1,303 @@ +define([ + 'js/system/events', + 'js/resources', + 'js/rendering/tileOpacity', + 'js/misc/physics', + 'js/spriteBuilder' +], function( + events, + resources, + tileOpacity, + physics, + spriteBuilder +) { + return { + map: null, + mapSprite: null, + + //TEST: Remove + visMap: null, + + pos: { + x: 0, + y: 0 + }, + moveTo: null, + moveSpeed: 0, + moveSpeedMax: 1.5, + moveSpeedInc: 0.5, + moveSpeedFlatten: 16, + + size: { + x: 0, + y: 0, + }, + layers: {}, + + tileSize: { + w: 32, + h: 32 + }, + + zoneId: null, + + player: null, + + init: function() { + events.on('onGetMap', this.onGetMap.bind(this)); + + var canvas = $('.canvasContainer canvas'); + + canvas.each(function(i, c) { + c = $(c); + + if (!c.attr('layer')) + return; + + this.layers[c.attr('layer')] = { + canvas: c, + ctx: c[0].getContext('2d') + }; + + c[0].width = this.size.x = $('body').width(); + c[0].height = this.size.y = $('body').height(); + c.css('z-index', i + 1); + }.bind(this)); + + this.layers.particles.ctx.globalCompositeOperation = 'lighter'; + + $('.canvasContainer') + .width(this.size.x) + .height(this.size.y); + }, + onGetMap: function(msg) { + $('.canvasContainer') + .removeClass('visible'); + + setTimeout(function() { + $('.canvasContainer').addClass('visible'); + }, 1000); + + if (this.zoneId != null) { + events.emit('onRezone', this.zoneId); + } + + this.zoneId = msg.zoneId; + + $('.canvasContainer').addClass('visible'); + + this.map = msg.map; + this.visMap = msg.visMap; + + physics.init(msg.collisionMap); + + msg.clientObjects.forEach(function(c) { + c.zoneId = this.zoneId; + events.emit('onGetObject', c); + }, this); + + this.mapSprite = spriteBuilder.buildSprite( + ['tiles', 'walls', 'objects'], [this.map['tiles'], this.map['walls'], this.map['objects']], [0.55, 0.85, 0.85] + ); + }, + fadeOut: function() { + $('.canvasContainer') + .removeClass('visible'); + + setTimeout(function() { + $('.canvasContainer').addClass('visible'); + }, 1000); + }, + setPosition: function(pos, instant) { + if (instant) { + this.fadeOut(); + + this.moveTo = null; + this.pos = pos; + return; + } + + this.moveTo = pos; + }, + clear: function(filter) { + for (var l in this.layers) { + var ctx = this.layers[l].ctx; + + ctx.save(); + + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, this.size.x, this.size.y); + + ctx.restore(); + } + }, + begin: function() { + if (this.moveTo) { + var deltaX = this.moveTo.x - this.pos.x; + var deltaY = this.moveTo.y - this.pos.y; + + if ((deltaX != 0) || (deltaY != 0)) { + var moveSpeed = this.moveSpeed; + var distance = Math.max(Math.abs(deltaX), Math.abs(deltaY)); + if (moveSpeed > distance) + moveSpeed = distance; + + if (distance > this.moveSpeedFlatten) { + var maxSpeed = this.moveSpeedMax; + if (distance > 64) { + maxSpeed += (distance - 64) / 1000; + } + if (this.moveSpeed < maxSpeed) + this.moveSpeed += this.moveSpeedInc; + } + + deltaX = (deltaX / distance) * moveSpeed; + deltaY = (deltaY / distance) * moveSpeed; + + this.pos.x = this.pos.x + (deltaX); + this.pos.y = this.pos.y + (deltaY); + } else { + this.moveSpeed = 0; + this.moveTo = null; + } + } + + for (var l in this.layers) { + var ctx = this.layers[l].ctx; + + ctx.save(); + ctx.translate(-~~this.pos.x, -~~this.pos.y); + } + }, + end: function() { + for (var l in this.layers) { + var ctx = this.layers[l].ctx; + + ctx.restore(); + } + }, + + renderMap: function() { + if (!this.player) + return; + + this.layers['tiles'].ctx.drawImage( + this.mapSprite, + this.pos.x, + this.pos.y, + this.size.x, + this.size.y, + this.pos.x, + this.pos.y, + this.size.x, + this.size.y + ); + }, + renderObject: function(obj) { + if (!this.player) + return; + + var x = obj.x; + var y = obj.y; + + var pX = this.player.x; + var pY = this.player.y; + + var dx = Math.abs(x - pX); + var dy = Math.abs(y - pY); + + var dxMax = (this.size.x / 64) + 4; + var dyMax = (this.size.y / 64) + 4; + + if ((dx > dxMax) || (dy > dyMax)) + return; + + var sprite = resources.sprites[obj.sheetName].image; + var ctx = this.layers[obj.layerName || obj.sheetName].ctx; + + var tileY = ~~(obj.cell / 8); + var tileX = obj.cell - (tileY * 8); + + var offsetX = obj.offsetX || 0; + var offsetY = obj.offsetY || 0; + + var alpha = 1; + if (obj.alpha != null) + alpha = obj.alpha; + + ctx.globalAlpha = alpha; + + var size = obj.size || 32; + + if (obj.flipX) { + ctx.save(); + ctx.scale(-1, 1); + ctx.drawImage( + sprite, + tileX * 32, + tileY * 32, + 32, + 32, + -(x * 32) - (~~(offsetX / 4) * 4), + (y * 32) + (~~(offsetY / 4) * 4), + -32, + 32 + ); + ctx.restore(); + } + else if (obj.flipY) { + ctx.save(); + ctx.scale(1, -1); + ctx.drawImage( + sprite, + tileX * 32, + tileY * 32, + 32, + 32, + (x * 32) - (~~(offsetX / 4) * 4), + -(y * 32) + (~~(offsetY / 4) * 4), + 32, + -32 + ); + ctx.restore(); + } else + ctx.drawImage(sprite, tileX * size, tileY * size, size, size, (x * 32) + (~~(offsetX / 4) * 4), (y * 32) + (~~(offsetY / 4) * 4), size, size); + }, + renderRect: function(layer, x, y, color) { + if (!this.player) + return; + + var pX = this.player.x; + var pY = this.player.y; + + var dx = Math.abs(x - pX); + var dy = Math.abs(y - pY); + + var dxMax = (this.size.x / 64) + 4; + var dyMax = (this.size.y / 64) + 4; + + if ((dx > dxMax) || (dy > dyMax)) + return; + + var ctx = this.layers[layer].ctx; + ctx.fillStyle = color; + ctx.fillRect(x * 32, y * 32, 32, 32); + }, + renderText: function(layer, text, x, y) { + var ctx = this.layers[layer].ctx; + ctx.fillStyle = 'white'; + + ctx.fillText(text, x, y); + }, + renderOutlineText: function(layer, text, x, y, centerX) { + var ctx = this.layers[layer].ctx; + ctx.lineWidth = 2; + + if (centerX) + x -= (ctx.measureText(text).width / 2); + + ctx.strokeText(text, x, y); + ctx.fillText(text, x, y); + } + }; +}); \ No newline at end of file diff --git a/src/client/js/components/social.js b/src/client/js/components/social.js new file mode 100644 index 00000000..cade9098 --- /dev/null +++ b/src/client/js/components/social.js @@ -0,0 +1,15 @@ +define([ + 'js/system/events' +], function( + events +) { + return { + type: 'social', + + customChannels: null, + + init: function() { + events.emit('onGetCustomChatChannels', this.customChannels); + } + }; +}); \ No newline at end of file diff --git a/src/client/js/renderer.js b/src/client/js/renderer.js new file mode 100644 index 00000000..3d71f0b3 --- /dev/null +++ b/src/client/js/renderer.js @@ -0,0 +1,716 @@ +define([ + 'js/resources', + 'js/system/events', + 'js/misc/physics', + 'js/rendering/effects', + 'js/rendering/tileOpacity', + 'js/rendering/particles', + 'js/rendering/shaders/outline' +], function( + resources, + events, + physics, + effects, + tileOpacity, + particles, + shaderOutline +) { + var scale = 40; + var scaleMult = 5; + var pixi = PIXI; + + return { + stage: null, + layers: { + objects: null, + mobs: null, + characters: null, + attacks: null, + effects: null, + particles: null, + tileSprites: null, + hiders: null + }, + + chunkSize: 30, + + titleScreen: false, + + pad: { + x: 10, + y: 10 + }, + + width: 0, + height: 0, + + pos: { + x: 0, + y: 0 + }, + moveTo: null, + moveSpeed: 0, + moveSpeedMax: 1.50, + moveSpeedInc: 0.5, + moveSpeedFlatten: 16, + + zoneId: null, + + textures: {}, + textureCache: {}, + + lastTick: null, + + init: function() { + PIXI.GC_MODES.DEFAULT = PIXI.GC_MODES.AUTO; + PIXI.SCALE_MODES.DEFAULT = PIXI.SCALE_MODES.NEAREST; + + events.on('onGetMap', this.onGetMap.bind(this)); + events.on('onDeath', this.onDeath.bind(this)); + events.on('onToggleFullscreen', this.toggleScreen.bind(this)); + + this.width = $('body').width(); + this.height = $('body').height(); + + this.pad.x = ~~((this.width / 2) / 32); + this.pad.y = ~~((this.height / 2) / 32); + + this.renderer = pixi.autoDetectRenderer(this.width, this.height, { + backgroundColor: 0x2d2136 + }); + + window.onresize = this.onResize.bind(this); + + $(this.renderer.view) + .appendTo('.canvasContainer'); + + this.stage = new pixi.Container(); + + var layers = this.layers; + Object.keys(layers).forEach(function(l) { + if (l == 'tileSprites') { + layers[l] = new pixi.particles.ParticleContainer(2500); + layers[l].layer = 'tiles'; + } else + layers[l] = new pixi.Container(); + + this.stage.addChild(layers[l]) + }, this); + + var spriteNames = ['sprites', 'tiles', 'mobs', 'bosses', 'bigObjects', 'objects', 'characters', 'attacks', 'auras', 'walls', 'ui', 'animChar', 'animMob', 'animBoss']; + resources.spriteNames.forEach(function(s) { + if (s.indexOf('.png') > -1) + spriteNames.push(s); + }); + + spriteNames.forEach(function(t) { + this.textures[t] = new pixi.BaseTexture(resources.sprites[t].image); + this.textures[t].scaleMode = pixi.SCALE_MODES.NEAREST; + }, this); + + particles.init({ + renderer: this.renderer, + stage: this.layers.particles + }); + }, + + toggleScreen: function() { + var screenMode = 0; + + var isFullscreen = (window.innerHeight == screen.height); + if (isFullscreen) + screenMode = 0; + else + screenMode = 1; + + if (screenMode == 0) { + (document.cancelFullscreen || document.msCancelFullscreen || document.mozCancelFullscreen || document.webkitCancelFullScreen).call(document); + return 'Windowed'; + } else if (screenMode == 1) { + var el = $('body')[0]; + (el.requestFullscreen || el.msRequestFullscreen || el.mozRequestFullscreen || el.webkitRequestFullscreen).call(el); + return 'Fullscreen'; + } + }, + + buildTitleScreen: function() { + this.titleScreen = true; + + this.setPosition({ + x: 0, + y: 0 + }, true); + + var w = Math.ceil(this.width / scale) + 1; + var h = Math.ceil(this.height / scale) + 1; + + var container = this.layers.tileSprites; + + for (var i = 0; i < w; i++) { + for (var j = 0; j < h; j++) { + var tile = 5; + if (Math.random() < 0.4) + tile = 6; + var tile = new pixi.Sprite(this.getTexture('sprites', tile)); + + var alpha = Math.sin((i % 4) + Math.cos(j % 8)); + if (tile == 5) + alpha /= 2; + + tile.alpha = alpha; + tile.position.x = i * scale; + tile.position.y = j * scale; + tile.width = scale; + tile.height = scale; + + if (Math.random() < 0.5) { + tile.position.x += scale; + tile.scale.x = -scaleMult; + } + + container.addChild(tile); + } + } + }, + + onDeath: function(pos) { + this.setPosition({ + x: (pos.x - (this.width / (scale * 2))) * scale, + y: (pos.y - (this.height / (scale * 2))) * scale + }, true); + }, + + onResize: function() { + var zoom = window.devicePixelRatio; + + this.width = $('body').width() * zoom; + this.height = $('body').height() * zoom; + + this.renderer.resize(this.width, this.height); + if (window.player) { + this.setPosition({ + x: (window.player.x - (this.width / (scale * 2))) * scale, + y: (window.player.y - (this.height / (scale * 2))) * scale + }, true); + } + + if (this.titleScreen) { + this.clean(); + this.buildTitleScreen(); + } + + events.emit('onResize'); + }, + + getTexture: function(baseTex, cell, size) { + size = size || 8; + var name = baseTex + '_' + cell; + + var textureCache = this.textureCache; + + var cached = textureCache[name]; + + if (!cached) { + var y = ~~(cell / 8); + var x = cell - (y * 8); + cached = new pixi.Texture(this.textures[baseTex], new pixi.Rectangle(x * size, y * size, size, size)); + textureCache[name] = cached; + } + + return cached; + }, + + clean: function() { + var container = this.layers.tileSprites; + this.stage.removeChild(container); + + this.layers.tileSprites = container = new pixi.particles.ParticleContainer(2500); + container.layer = 'tiles'; + this.stage.addChild(container); + + this.stage.children.sort(function(a, b) { + if (a.layer == 'tiles') + return -1; + else if (b.layer == 'tiles') + return 1; + else + return 0; + }, this); + }, + + onGetMapCustomization: function(msg) { + if (!msg.collide) { + var children = this.layers.tiles.children; + var cLen = children.length; + var x = msg.x * scale; + var y = msg.y * scale; + for (var i = cLen - 1; i >= 0; i--) { + var c = children[i]; + var cx = c.x; + if (c.scale.x < 0) + cx -= scale; + if ((cx == x) && (c.y == y)) { + c.parent.removeChild(c); + break; + } + } + } + + var tile = new pixi.Sprite(this.getTexture('sprites', msg.tile)) + + tile.alpha = tileOpacity.map(msg.tile); + tile.position.x = msg.x * scale; + tile.position.y = msg.y * scale; + tile.width = scale; + tile.height = scale; + + if (Math.random() < 0.5) { + tile.position.x += scale; + tile.scale.x = -scaleMult; + } + + this.layers.tiles.addChild(tile); + + physics.collisionMap[msg.x][msg.y] = msg.collide; + physics.graph.grid[msg.x][msg.y] = !msg.collide; + }, + + buildTile: function(c, i, j) { + var alpha = tileOpacity.map(c); + var canFlip = tileOpacity.canFlip(c); + + var tile = new pixi.Sprite(this.getTexture('sprites', c + (0 * 160))); + + tile.alpha = alpha; + tile.position.x = i * 8; + tile.position.y = j * 8; + tile.width = 8; + tile.height = 8; + + if (canFlip) { + if (Math.random() < 0.5) { + tile.position.x += 8; + tile.scale.x = -1; + } + } + + return tile; + }, + + onGetMap: function(msg) { + this.titleScreen = false; + physics.init(msg.collisionMap); + + var map = msg.map; + var w = this.w = map.length; + var h = this.h = map[0].length; + + var hiddenWalls = msg.hiddenWalls; + var hiddenTiles = msg.hiddenTiles; + + this.hiddenRooms = msg.hiddenRooms; + this.hiddenRooms.forEach(function(h) { + h.container = new pixi.Container(); + this.layers.hiders.addChild(h.container); + + this.buildRectangle({ + x: h.x * scale, + y: h.y * scale, + w: h.width * scale, + h: h.height * scale, + color: 0x2d2136, + parent: h.container + }); + + for (var i = h.x; i < h.x + h.width; i++) { + for (var j = h.y; j < h.y + h.height; j++) { + var cell = hiddenTiles[i][j]; + if (cell != 0) { + var tile = this.buildTile(cell - 1, i, j); + + tile.position.x *= scaleMult; + tile.position.y *= scaleMult; + tile.width = scale; + tile.height = scale; + + h.container.addChild(tile); + } + + cell = hiddenWalls[i][j]; + if (cell == 0) + continue; + + var tile = this.buildTile(cell - 1, i, j); + + tile.position.x *= scaleMult; + tile.position.y *= scaleMult; + tile.width = scale; + tile.height = scale; + + h.container.addChild(tile); + } + } + }, this); + + var padding = msg.padding ? JSON.parse(msg.padding) : {}; + + this.clean(); + var container = new pixi.particles.ParticleContainer(270000); + + var isPadX = false; + var isPadY = false; + var padX = 0; + var padY = 0; + + if (!msg.padding) { + padX = 0; + padY = 0; + } + + var chunkSize = this.chunkSize; + + for (var i = -padX; i < w + padX; i++) { + if ((i < 0) || (i >= w)) + isPadX = true; + else + isPadX = false; + + for (var j = -padY; j < h + padY; j++) { + if ((j < 0) || (j >= h)) + isPadY = true; + else + isPadY = false; + + var cell = null; + + cell = map[i][j]; + if (!cell) + continue; + if (!cell.split) + cell += ''; + cell = cell.split(','); + for (var k = 0; k < cell.length; k++) { + var c = cell[k]; + if (c == 0) + continue; + + c--; + + var tile = this.buildTile(c, i, j); + + container.addChild(tile); + } + } + } + + var renderTexture = pixi.RenderTexture.create(w * 8, h * 8); + this.renderer.render(container, renderTexture); + + var cw = w / this.chunkSize; + var ch = h / this.chunkSize; + + for (var i = 0; i < cw; i++) { + var tw = Math.min(this.chunkSize, w - (i * chunkSize)); + + for (var j = 0; j < ch; j++) { + var th = Math.min(this.chunkSize, h - (j * chunkSize)); + + var texture = new pixi.Texture(renderTexture, new pixi.Rectangle(i * this.chunkSize * 8, j * this.chunkSize * 8, tw * 8, th * 8)); + + var sprite = new pixi.Sprite(texture); + sprite.position.x = i * this.chunkSize * scale; + sprite.position.y = j * this.chunkSize * scale; + sprite.width = tw * scale; + sprite.height = th * scale; + + this.layers.tileSprites.addChild(sprite); + } + } + + this.stage.children.sort(function(a, b) { + if (a.layer == 'tiles') + return -1; + else if (b.layer == 'tiles') + return 1; + else + return 0; + }, this); + + if (this.zoneId != null) + events.emit('onRezone', this.zoneId); + this.zoneId = msg.zoneId; + + msg.clientObjects.forEach(function(c) { + c.zoneId = this.zoneId; + events.emit('onGetObject', c); + }, this); + }, + + setPosition: function(pos, instant) { + pos.x += 16; + pos.y += 16; + + this.hideHiders(); + + if (instant) { + this.moveTo = null; + this.pos = pos; + this.stage.x = -~~this.pos.x; + this.stage.y = -~~this.pos.y; + return; + } + + this.moveTo = pos; + }, + + hideHiders: function() { + var player = window.player; + if (!player) + return; + + var x = player.x; + var y = player.y; + + var hiddenRooms = this.hiddenRooms; + var hLen = hiddenRooms.length; + for (var i = 0; i < hLen; i++) { + var h = hiddenRooms[i]; + h.container.visible = ( + (x < h.x) || + (x >= h.x + h.width) || + (y < h.y) || + (y >= h.y + h.height) + ); + } + }, + + update: function() { + var time = +new Date; + + if (this.moveTo) { + var deltaX = this.moveTo.x - this.pos.x; + var deltaY = this.moveTo.y - this.pos.y; + + if ((deltaX != 0) || (deltaY != 0)) { + var moveSpeed = this.moveSpeed; + var distance = Math.max(Math.abs(deltaX), Math.abs(deltaY)); + + var moveSpeedMax = this.moveSpeedMax; + if (distance > 100) + moveSpeedMax *= 1.75; + if (this.moveSpeed < moveSpeedMax) + this.moveSpeed += this.moveSpeedInc; + + var elapsed = time - this.lastTick; + moveSpeed *= (elapsed / 16.67); + + if (moveSpeed > distance) + moveSpeed = distance; + + deltaX = (deltaX / distance) * moveSpeed; + deltaY = (deltaY / distance) * moveSpeed; + + this.pos.x = this.pos.x + (deltaX); + this.pos.y = this.pos.y + (deltaY); + } else { + this.moveSpeed = 0; + this.moveTo = null; + } + + this.stage.x = -~~this.pos.x; + this.stage.y = -~~this.pos.y; + + events.emit('onSceneMove'); + } + + this.lastTick = time; + }, + + buildContainer: function(obj) { + var container = new pixi.Container; + this.layers[obj.layerName || obj.sheetName].addChild(container); + + return container; + }, + + buildRectangle: function(obj) { + var graphics = new pixi.Graphics; + + var alpha = obj.alpha; + if (alpha != null) + graphics.alpha = alpha; + + var fillAlpha = obj.fillAlpha; + if (fillAlpha == null) + fillAlpha = 1; + + graphics.beginFill(obj.color || '0x48edff', fillAlpha); + + if (obj.strokeColor) + graphics.lineStyle(scaleMult, obj.strokeColor); + + graphics.moveTo(obj.x, obj.y); + graphics.lineTo(obj.x + obj.w, obj.y); + graphics.lineTo(obj.x + obj.w, obj.y + obj.h); + graphics.lineTo(obj.x, obj.y + obj.h); + graphics.lineTo(obj.x, obj.y); + + graphics.endFill(); + + (obj.parent || this.layers[obj.layerName || obj.sheetName]).addChild(graphics); + + return graphics; + }, + + moveRectangle(obj) { + var points = obj.sprite.graphicsData[0].shape.points; + if (!points) + return; + + obj.sprite.dirty = true; + obj.sprite.clearDirty = true; + + points[0] = obj.x; + points[1] = obj.y; + points[2] = obj.x + obj.w; + points[3] = obj.y; + points[4] = obj.x + obj.w; + points[5] = obj.y + obj.h; + points[6] = obj.x; + points[7] = obj.y + obj.h; + points[8] = obj.x; + points[9] = obj.y; + }, + + buildObject: function(obj) { + var w = 8; + var h = 8; + if (obj.w) { + w = obj.w / scaleMult; + h = obj.h / scaleMult; + } + + if (obj.sheetName == 'bosses') { + obj.layerName = 'mobs'; + w = 24; + h = 24; + obj.w = w * scaleMult; + obj.h = h * scaleMult; + } else if (obj.sheetName == 'bigObjects') { + obj.layerName = 'mobs'; + w = 24; + h = 24; + obj.w = w * scaleMult; + obj.h = h * scaleMult; + } + + var sprite = new pixi.Sprite(this.getTexture(obj.sheetName, obj.cell, w)) + sprite.x = obj.x * scale; + sprite.y = obj.y * scale; + sprite.width = obj.w || scale; + sprite.height = obj.h || scale; + + if (obj.sheetName == 'bosses') { + sprite.x -= scale; + sprite.y -= (scale * 2); + } else if (obj.sheetName == 'bigObjects') { + sprite.x -= scale; + sprite.y -= (scale * 2); + sprite.alpha = 0.80; + } + + if (obj.flipX) { + sprite.scale.x *= -1; + if ((obj.sheetName == 'bosses') || (obj.sheetName == 'bigObjects')) + sprite.x += (scale * 2); + else + sprite.x += scale; + } + (this.layers[obj.layerName || obj.sheetName] || this.layers.objects).addChild(sprite); + + return sprite; + }, + + addFilter: function(sprite) { + var thickness = 16; + if (sprite.width > scale) + thickness = 8; + + var filter = new shaderOutline(this.renderer.width, this.renderer.height, thickness, '0xffffff'); + + if (!sprite.filters) + sprite.filters = [filter]; + else + sprite.filters.push(); + + return filter; + }, + + removeFilter: function(sprite, filter) { + if (!sprite.filters) + return; + + sprite.filters = null; + }, + + buildText: function(obj) { + var textSprite = new pixi.Text(obj.text, { + fontFamily: 'bitty', + fontSize: (obj.fontSize || 14), + fill: obj.color || 0xF2F5F5, + stroke: 0x2d2136, + strokeThickness: 4, + align: 'center' + }); + + textSprite.x = obj.x - (textSprite.width / 2); + textSprite.y = obj.y; + + var parent = obj.parent || this.layers[obj.layerName] + parent.addChild(textSprite); + + return textSprite; + }, + + buildEmitter: function(config) { + return particles.buildEmitter(config); + }, + + destroyEmitter: function(emitter) { + particles.destroyEmitter(emitter); + }, + + setSprite: function(obj) { + var cell = obj.cell; + var y = ~~(cell / 8); + var x = cell - (y * 8); + + var baseTex = this.textures[obj.sheetName]; + obj.sprite.texture = this.getTexture(obj.sheetName, obj.cell, obj.sprite.width / scaleMult); + }, + + reorder: function(sprite) { + var mobLayer = this.layers.mobs; + var mobs = mobLayer.children; + mobs.sort(function(a, b) { + return (b.y - a.y); + }); + }, + + destroyObject: function(obj) { + if (!obj.sprite.parent) + return; + obj.sprite.parent.removeChild(obj.sprite); + }, + + render: function() { + if (!this.stage) + return; + + effects.render(); + particles.update(); + + this.renderer.render(this.stage); + } + }; +}); \ No newline at end of file diff --git a/src/client/js/rendering/spriteShader.js b/src/client/js/rendering/spriteShader.js new file mode 100644 index 00000000..b0fcdcf6 --- /dev/null +++ b/src/client/js/rendering/spriteShader.js @@ -0,0 +1,111 @@ +define([ + 'js/resources' +], function( + resources +) { + var canvas = $('').appendTo('body').hide(); + + return { + outline: function(imgName, offsetX, offsetY, imgW, imgH, ur, ug, ub, ua) { + var img = resources.sprites[imgName].image; + + canvas[0].width = imgW; + canvas[0].height = imgH; + + var ctx = canvas[0].getContext('2d'); + ctx.drawImage(img, offsetX, offsetY, imgW, imgH, 2, 2, imgW, imgH); + + var imgData = ctx.getImageData(0, 0, imgW, imgH); + var pixels = imgData.data; + + var secondData = ctx.getImageData(0, 0, imgW, imgH); + var secondPixels = secondData.data; + + var newData = ctx.createImageData(imgW * 4, imgH * 4); + var newPixels = newData.data; + + var fillPixels = function(x, y, r, g, b, a) { + var index = ((y * imgW * 4) + x) * 4; + + for (var i = 0; i < 4; i++) { + for (var j = 0; j < 4; j++) { + var newIndex = index + (i * 4) + (j * (imgW * 4 * 4)); + newPixels[newIndex] = r; + newPixels[newIndex + 1] = g; + newPixels[newIndex + 2] = b; + newPixels[newIndex + 3] = a; + } + } + } + + for (var i = 0; i < imgW; i++) { + for (var j = 0; j < imgW; j++) { + var index = ((j * imgW) + i) * 4; + + var transparent = (pixels[index + 3] == 0); + if (transparent) { + var touchPixel = false; + if (i > 0) + touchPixel = (pixels[index - 1] > 0); + if ((!touchPixel) && (j > 0)) + touchPixel = (pixels[index - (imgW * 4) + 3] > 0); + if ((!touchPixel) && (i < imgW - 1)) + touchPixel = (pixels[index + 7] > 0); + if ((!touchPixel) && (j < imgH - 1)) + touchPixel = (pixels[index + (imgW * 4) + 3] > 0); + + if (touchPixel) { + secondPixels[index] = 0; + secondPixels[index + 1] = 0; + secondPixels[index + 2] = 0; + secondPixels[index + 3] = 255; + } + } + } + } + + for (var i = 0; i < imgW; i++) { + for (var j = 0; j < imgW; j++) { + var index = ((j * imgW) + i) * 4; + + var transparent = (secondPixels[index + 3] == 0); + if (transparent) { + var touchPixel = false; + if (i > 0) + touchPixel = (secondPixels[index - 1] > 0) + if ((!touchPixel) && (j > 0)) + touchPixel = (secondPixels[index - (imgW * 4) + 3] > 0) + if ((!touchPixel) && (i < imgW - 1)) + touchPixel = (secondPixels[index + 7] > 0) + if ((!touchPixel) && (j < imgH - 1)) + touchPixel = (secondPixels[index + (imgW * 4) + 3] > 0) + + if (touchPixel) + fillPixels(i * 4, j * 4, ur, ug, ub, ua); + + continue; + } + + var r = secondPixels[index]; + var g = secondPixels[index + 1]; + var b = secondPixels[index + 2]; + var a = secondPixels[index + 3]; + if ((r + g + b == 0) && (a == 255)) { + a = 0; + } + + fillPixels(i * 4, j * 4, r, g, b, a); + } + } + + canvas[0].width = imgW * 4; + canvas[0].height = imgH * 4; + + ctx.putImageData(newData, 0, 0); + + var url = canvas[0].toDataURL(); + + return url; + } + }; +}); diff --git a/src/mtx/skins/0001.png b/src/mtx/skins/0001.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0c02ae855cc04c255e9663d9aa5b2adc5ed74f GIT binary patch literal 343 zcmV-d0jU0oP)7sq#)Cz5gwZGQb#HAR)_R)35Dq2baI+ypFzs zaG}Bh>?n}KK^_G0k>&qqI-$se_{j3GlmUuekOx3~Z2DpH==!UyF8^QT_a7YlAbAj* zt^qJB$_DIdm`Bh(aK+dS>}Xu_uUmI-F0;1&4+;cOK1cT?NWMYY`9H`L*yKS;7A6kL=jfgU p$;0&Hk_TZ>Ab`q&0SSbW3IILYZx*#ujLZN4002ovPDHLkV1nmdpUnUO literal 0 HcmV?d00001 diff --git a/src/mtx/skins/0001.pyxel b/src/mtx/skins/0001.pyxel new file mode 100644 index 0000000000000000000000000000000000000000..8e6d6a4d8e248e05ab669a7212bd43fb5b59b5f3 GIT binary patch literal 3451 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 literal 0 HcmV?d00001