From 1aa797ddefab0993d5999c70fc65c59c60ee76d4 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 21 Nov 2021 23:27:14 +0000 Subject: [PATCH] Add quiet laser sound --- .../sound/tone440sawtoothquiet.SCREE.5000.wav | Bin 0 -> 88244 bytes src/Dodge/Annotation.hs | 9 +- src/Dodge/Annotation/Data.hs | 2 +- src/Dodge/Floor.hs | 3 +- src/Dodge/Placement/Instance/Sensor.hs | 4 +- src/Dodge/Placement/Instance/Turret.hs | 12 +- src/Dodge/Room/RoadBlock.hs | 2 +- src/Dodge/Room/RunPast.hs | 8 +- src/Dodge/Room/Start.hs | 45 ++- .../SoundLogic/ExternallyGeneratedSounds.hs | 351 +++++++++--------- 10 files changed, 227 insertions(+), 209 deletions(-) create mode 100644 data/sound/tone440sawtoothquiet.SCREE.5000.wav diff --git a/data/sound/tone440sawtoothquiet.SCREE.5000.wav b/data/sound/tone440sawtoothquiet.SCREE.5000.wav new file mode 100644 index 0000000000000000000000000000000000000000..6287765c2b85eceb3bb7b739b719c0dad6be01b0 GIT binary patch literal 88244 zcmZskWwaCL-?b;1=p?umcXxMpDDLj=Qlz-MI}~?!FYXS7;>ERCA(P2WWahmx=Ro^^ z*1Py}7T@o+_w0S`U+Pz{Qe|6Hi_oNe5&sYq+Zx#x+wRy>*_+r`*dN-{INCZ^ zI$k=`J3BhpJKs99y1Kfyx!${SyL-ELxWBp!NPVRPk}MVV4E7xM1U)6ZBfZDGzxWRL z6kkbshhy3!&xHjB3mP`B02PK`ZoQ8p4aGY>@;K}k1#~oBd9_V%TUW< zOT<#bI@)^FY7@(djS>^1Gv?KkXk9CaOY9k(3GoOPYcoVT4RUCmuf zTu)so-EG~g+|S(^r4G`1>5Y`l)77)Z^U;&j+uOU-+sU`t_r{l7?jrA!|CaOl`}ueJ zWq$$X7v-Q5P>KbH1r7xSwS+oGJ+6vcIc=hLMso(M1}6tE2fd-1p_!rUq4?qY;kn`4 z;iQpQf79gS35`rWFnT8vH#N43-Uz44n)K;Y#7L;d5bUq;h0h!ye+eH52g1c7LnFUOLXooi2>qmPF)A42jPr(Fs3uGj zE(;z@Ez1nc4NF{W1M3{?9cxmtfw)ZkQ%q%RW?OFi%a+#O#=h46)SlJR-m%f~&XLvG z!@0%z$(hU5*R|92%~ilXz`frca2Jt=N=KxiRK_#RbJ8Pt%X%kzPk2ZAe)olZ<>le> zS=r*R|#&Fm0y6{I{Nbks&$md8Ny`R2Qm-Pb1AY;Fw8byU+!eK!dN?Ar)PFr+KW$PI0 zd8=KlCQcSFiE(%#b8VMxiS4!R^X-4wlR6qX7CY`aQaYPEe{()@rg61(t#-X|Wpa0P zZ*aeNXOVhJo28FZK2HzNUe7K5FZN7haAp_*yvQIAJAK*XA3n``isvK1e zrBq;S;6y-FE2`twi>ghlsZG+ZX`W!M;H=<{V1iJC(A?17P?B(y@RIQTaH>el$ZwJ7 zkyLs|eU<)7&th~mHW}}X>_SgrtMFOKZRu~>VNrM?zgqWLHEVHkka$8=#qze{wo^94 zR@pw;BvQ_y<$rI=w*c0#t3aNwCL#m>d z(uQcqwXjw;I4XEDXbV*cO$eP2Il|S$Q^S|SaU(xRW=3vB;^__bIr=?4vC+g>YTPqY z2`z=?!c!rwrJZH9<+UZFwX1cV^@BC5*h}0Zei3uo`rCHdzS#=d2iOnU{q~ZML5|~& zpred)l=HY#bd`6FbDekD+|}Ka+?RPFwWX=jA5t7oea}44El)CUL+@g59bU+7Ujn(l zyjZ>^r}Q`SFY`b2r&3xeE0kwSxFvmU3nig${)tZ$6(l+PwtlqbpOWw*bYf13Y_Kc4cl zGDo?gBns3IEDYQUBvYHIOVo#IYOSTVLVK>I3$_og4ZaR$3Uv>y4}A#b2=@r@2!9FZ zi42JBhy)@9^uhW;UDb;l!;GVbZj=#53nv7drMzX5<&4E`tzw;Ky=09m))Z%p*Tn?3 z2E35FypX2$MQCA4M+>y@kt3tCwR4^Gg)@t*qiYjdnAP3Oy~X{-om=WB?UZ~{LC-+X zL671o=Ka-s*gMd-$0z%W$b;m=vL=`C4@V0HrHnF0IjvaH!U=)%0k>LBou*z@y;@yu zhW3Y+AlM+dAb2;JIMgz3chxuP@AaHUcVn0Fw^3N= z&P)F!6z7E;wgfCCtwXHGts!eUag=xxEi8`~p0&B`Rqa#lm+f9hEypa!bw@&HJ?A{< zU1uU!GuI;516OKyQ?&50JA>3lS}VPfvUoaqHhA89vU_`aw|G1H*81N1GRxiNjq*o1 zr@yCvm;bXrztT_Hr})sqfq}yTEl@%ot{zi$wX8NqJFQuRm4g$5=Y#H0wa`?wPzu)z zPY>S-$BQ(M%!%BOB-NYfzv=h&)J98V1zMO^=pd{SUJF?)oh_R!?<_g3y{ucTK5Gtf zptwi;M=WL=U^{3F+KSqT+mG5K_A-vqj#Cbcv!ZjN^R(0Js_2^Gy6B4QuHl~JzK#~w zm*z=#q@RTuraF*EVRc(8A7W;oD%I zP>;~A&?mI8Z+Kr=4i`cT4@R^|34OT!yDk`|jj_f_w6KCOMK~>ZEtM^^EEg;Zt<|mb ztk*(lMg%)OXc6Dxa{_V`}>h0R%`ifiZ@80e9 zxeG~yrTvm7755DF9QTAhWxS)&!e4y{ePLe-d8B+y7W`%XRh1Z1Ng)>FEMK(n~L~`jp^&R>b zJ-^Y<*k|~RBEn$dprE0JL(oDMEgXgx3Sw1pEL!M93uo9a+2Y!3+2`1=+mkrzpoO;` zKRKH?mpC6eQ@L8WR=J+I(!1Nc*SO!fGf7>fP11WQm#3R&r{|L=ueZN))(A>eA!KrAWCsZ#q zD|9=QFx)6S4=qg23t1j{5J{uA)>rD!af=;si*JoALKk6+@J`5U>1Nq&`DDp&?T;2J z)&k-%ajzKRg$%bHw}oxx>|^Yw>^4UQ$7IJ@hsRmPIm3C$85b>_ffmMhH*ha>-**2b zHI){lg(*C(J-?xasnNpK-WI-PypS|TWfl7UhK;=Y^EREuIWUf)zreLuW&_aOLpC@Wrq@QUkYmJ>t>p>$CKmdQzjV zvBbDzBo~?qON7Tl8cPeyTFYOSOt{63))&0=&f;eAZ(c|*+fLhOTYh^#`(C?jFM?Y< z;s`iOIe$e9BhGTJ(XLZyVI}tj_XW2@swqv8uA+stJhMGFaf?m7v%R%_(|p%`@#Q-5 zJo%=a%wONX)c>bHh0;v6x&?%HOwFjufwaCh)?un=x> zf5;yy8Xk-mhQh@oqa#Nm7QMVa3N5r4RgDS8CBr4u6s8I{1j*6>w|K{r04-dA7A6-P ziz~$YVmez3+bY|0TY7tY`v&_9drn@+R>ylsE@w})@T0R3FXR9(q?mi4`>0!Sm%=Tc zKnqKI#(7S7?B0sr3EtAa5olq=S4kctpOfwWD*j3S%YK(qTbZidRJ?%(fmvu_BDD!_ z@u8X&EnKEO*3tyq1Xl)M1=EE(;}+kAvV?nvH=u<%aErSlUm^wd{`x-LVsT@jam-NA z!r{U(J{-$f##>HV?AFTG3DzsP#aiN2@tPRVR?9ZW_J=Kzy@7q9{jU8dM{{1tU%16K z&XvyR&U9$u8rM7AVt4mO_Xl@QsTW%KNh;v!>)Gd#J%w?LhjEL$d|!P9<$>~kS&@tS zhvF84{?f`wUWheN9=CWlU{|ZClhiA!11+4Q-O%C&>*E&x3?>RSLJJ>;lA?u6!hfNK zZ6d31iy3i?>(Ii?XyF#LFt5-<*e!e!3ZRAiEj~+e>o3+LXkiI)qv$!=I*8LNA6T;;R@-wl)=*uEqvw4;_Z%G zZ0}p`d+y813)#jC$?Nar-{Jq@&!hBFb}3(#f`I{n0|6yaR2`}wRwHUjZIt%AW($@^ z3r`2_XyJs=Wwfwnct-ddT38n?yd6o5TU@OFsi!oW;TE47DTVgJ3gLy29xYsJdCv>! z$qV_+3+XNH7C(uFZM|)WY(BJbFm5q~TO8py<}e)PoMW74oOZNuit8-jg;m`%+*jOj zrMl8=>6Vnx(+Ictz>^d$T;{Foo9DZO7B-U?$PeY@{uch<{7-R<9h8-5VFt8tUEqBn z8(O$k{ix>F`f5A1Z(4!iz~H{18Z3+!9tats;^EO~p(Rp2G7h)s&@1Uv^$WTew>TTO zm{6!A%ti|npoR0$!X#+n60|TCTDVGlj$79$d_cVzovgC zS{PrctISt!D~SV5af|l@snn)u;bS$e)>d1sz0fiTI|Mfc-vqOTdWJTKK8JFlg*(IF z!UZG!(L#TusQ#;dSP$u?j8Vq#hA5O1#tLUiPAXfbTFzTM)|$A*n^vz_AGdhhOimV{ zg~{#B?8|YB=^U*bs~yiB8JwMPi|?G7Ts>VIU7uY!NKST=oaB=RN_!+lDnfE{#G`pi zlAIjz4)yKzX}+R-7al?ji~Gm=Pv90SE2EW*iY-tLExd#l)9&;0)0E`o3CT$t?<$g$rM`P;VNg4!8KypIPaQ zTZ|?rJpx+;Ujn(!gbJ)7twvn9VwD;$Q`0aW5 zF5HV27Ih9GISDySnaPROUDiF`ecJ8BEl$HNdPq*DqJ?q1b#aT;eN%i_d|tVhJd5Nc zftj4##Vs~bmM9ODlz|q3m4U~BjJU;h>I*fq)$qw9Jl++s{}GFiBUTm0EF-EzwkCpI}rA~q5iqlGDK&CTQ_oxQbv zjs3Yj3(3i5vc=rIke#^2+$1MENKOipoa{4`lVN0wx>Uk5(sK&8SP8dyo)>ZqEi5CC zmQRtKR3=-z;I}I^l}XA~wD4z=lbeBfYD0A{ZZWaeT$`^w(S8cHL<=7WGmxCD4!!=7 zoMevljckm3#Vz(Xlau_$5MD@#@2O$JQ6VIhv5c}Dw^*$eNlq?WMX|b>oJh9Xw&}JT zw)pnC_IdW(xWz_}B_t;)oGr)}pE%Q!oUC-ccBON7d(pMg~p=Y-%}mGH%hORYwaiqlMLj^MY6T zF06|d-bM?Xh8Kq)hEtH7tcd&-$)LB<*XXbH3`SRDqw&VbC3F+E^Ie$7($})fBI6bZ zTlZO2Yf*7H*`h(VILda?X0cbWkGG$(yBt*$&FP7L&M}xaad- zm`rLZ{f1jiXC^1lJ(;{6y&G|ht4U7M%N=+j@5vUsk(|6m3ww~9d{c7rUAUX%q%dyr z5N@%A_A6SbYh_4IP6e%@N}=&2C(dwHz6&q@f0C1?ypV@zVKg~;BBYB=PBK|LSvOl> zTXTs$aEsr>?0gr-Bqsyy2kZfRF~_gC#fYP{a|GXohO>feB5u)*Tbzblj4M@>=15o2 z!n&Tho;#kz-p1ZVxW(DNo4$l{L)_whIkCUFe+kJ+YNaJw_*6+xaB&*t4-9&Pd z4K3WF{iEd#_CX831&f3Rh7RKvONNK@Lc~b1$oR zeTaTQ*Ysk>aN~$!7^O*0P6-xECEVh9i;LuBDsIt>TbwE05EI(!+7{Su+mhKE+n3ny z+f$L8EO$J0q;JYA%8_>gmO+1(84i+s{yN8N1dqNP$jJ%$;oXkKFP_#;GJOdP~*^&&|_MJ z*5T#hr{N5dw!HLbk!*Trl9La5HlvrZ-S}+e7kUf(gl|G2%V5g^w6Fx(;!&$%EhUaY z3$3;v(lC&Sb8}XyIK~T3*O%++s$l6)nPZl9P_K z2rtpXuHNn54!(81S9}+CkvGd9Ey7J+NE2y> z^iWFRY3^C*dF=Vg+Zwmn*f*aRA*tL#UP6nI(%;6v0xe9ZbX3+VuSrh21~vsg2C}Pt z)a@iE`LzDp-q_^i5G_LS&sD)d+iCb(ya&nJs zv4v$JEkbf@8|!b@=hk#$dvUG!O3Y&GV%uo@8@Je#7U844059Z#;~!dtU(DpBxNDf} zs7rU1c8_+Sa$C^CiP9NK!Y$75T=2vrIhp0H?3+Z3Aj#F`nYhJ-{-6Ex{5SoHl!mkj ze=5lXO=uAw1yY;I$ul*h*3L{$vIe^aHw3=~v!I3Baf^k*y=W19;i8d&XrV7sULT~N z(!+Y$AIZsN+@fTuhFiR5@mgzJXIXDq6Pn4%pJFmIIe9?O){36(8Occp#~R0LM;5ej zv-7<(r>i?H!bewrcVChdndD>;TBwqo45w!kyd}M3y(hhcd`EGMrQ{K2a#9Yrcp5FN zq)etoaML184O|bzQR}L+)j#Oj8fc5OKegnz#qY_UuPxNd( z_1(C|0!Dvhw-GQ3(zC@RCqpeKEMZGIwD1%?TSeUBdC_I7fm^(4^U@;B#w{jvG;qvA z3zL$ZEOkDlXKUkHMvIV!7GaJ1H7}&Qv`+fW3+e6IN{f)k+m9BZt8Xh>m{;zB7Jfzx z2m1H;1OCFwQ01_qDWyqHPVqu2sH4@hxWy{;Y?pA0KL@9foWwy3XWZfNLA|4RKVo}>j z+fiDCvSxB3Ix0CPI4(Hc&Z=nPWoMk&Dk`=Cpqbf7Jdm7PzR`c(ZWL7Fm1mU(MkkI1drnu%Z0{%5SBqzD)*>*VpaprUNbM3<|7IhDDA9AbilF~5g7;do)Ey78UjpSq^$;oivNuMB> zm&eIx(87xT>Hf25VRdB&S{N@-H!wGFE0C0Iaf$k;no?_~E!Cdk7CZAoUI){MI)*mj z7PE)DgtvwN4(BF0*%A2`$)^v{_mi9yH3l1paf>B{5yEl75XxD`SkB@Wt69fcFI$~x z;bgSXW27+ZVU^#aCGFFCQQ|Ddrzcix5ptMkps0U8xip9XJ=8oLt5&*2XQ~(!3-m zbAo>alY|#l7(A@f5R=N$1Scw3p42*^!551J-gAx*k-(^QST+}qGu~)>1WwT z&sGR6JY)@8OX3!f;}*-?#@J4yg%#~n?B{A-Q%S8! zPF~;^J9^f7UVE~7yU-%E@vZT_q-X0QucJ}V>hIy-;{W8&t@KrPlAII@^rJ=a1&XUf z)FWz`+51t;Ma9ib|G7hVX(30DixG?SBhk=bT)(nw#V-_=u)oGdpU8EJ$z z!Ybi8TG$>fe1#TvMho9tbEAbjX%Pz8`q>VUoD?&Yld!$GVRsxsPm6FDx7bXcFFz(*Y(;YN*q>f$jTSyr zvf>su1>TaJ^ia2`pUmWBhvth-P6D{a;bet!3#ZT` zcxe%)qlF19jV+5TcP%Nb&CtR}XkjaHH7!DB+~O9p#atvOTkRk0xkyfSI=(mxI{P{I zITd=gA+!i8S~$#o+$~7uq|wq@$?BJ!{zJ8h-*8n@UbxSkdvJ1xSd&_DES{ldG#|Ii|QPfmvF zN6^BOBqzrVODuEZz%5RtMUbpN;}&nyv(*vji8pBx8rYWL7Sr%TR>d+WD;zIq5jr?G zINzAe$yV0~S1yw|`Nv(*WKMiiG0z~96V+4NJB$`#04;(_&o+YOBqEokXFE-DQc)R) zTXY602c`us2D~sQGt}#9Lah$pg}1dN!A8L)!F$0}p=P1q(8AO(Co97*NlrRNHqf(W zH<^=OzLXoS`2fN3g%=5T9}3wVXgEwmO1(0$xY7|lbpQq<%&&C^7#9cEh_$e z%3$20suU$TIf53JHj@)8$;kwm6IZYb%*oZDD^xo)gPtuxxGpV140Ez1a*sy6slG!0 zOHXUGp+$IVWE0v7n}xR|C%t$fpJ~*4TX$K%S@Vg5$rgiRA(E4$wt%gIeF)!$5qky4 zc*jY;3(GsFIxmu()N)NVnUe-&i}&2|Xw>JSg-OxEWoThqZ!21a#v~^(%*pcD>Dg}ZLK=Ced28`Pu9?ZnOj?Ba{)YZJFegcr#>!IV zKFLYzz|z1A++usQ@Hxy$TWvc%TP~85Ex5%zvupTYU z?Cb?|^1+$c)yuWZ<#XkA4|eZC3yVmMivrdbVZSeJxe6MesM6lQf}rp>?5Wp=@M} z8^iBu5xSv;A0v77zPQD&dSPRLaS-OD2ra@Pw6LUQG;YyitzaE*J&P7r6(@;Taf`L- z*{<6X*z3eHCygBoXw;L@s4sCoqi1VJi|`CB?Brf&CMVs|!Vgj&+~O|JS5HBDwgdER zJA9vf`AJUp$=~F{{z3i&Xkk&bFq)i{B{?|*l~slBsY|L|tENq-XNymAGM5*UBvgy< z!keMwxW%Pra?%R7_$-o6Z%d2t9Ok5x$(-b%QQt;#lGoD5vd8kxQouUMy5Ab0MTjyd znplS978nkc?TA0z=#kv74%r5pcnUmaT z;rHa^Aa1dQV~FE-N0^>%wDXwL<|^l!K#O39Ihp9b$_uGOws=#D3v&`pP7Sp!5np5k^3;9fP62qJn2n`M$ z3@M?~xW(h)NVs%lOyndzTNT{m1(=hnFeg_Hw@{bl_Ut1$&m-O06}_Ni;cW zhZer%yRZvd7)?&Pp@kpA`NL27Cs?4X%|@sf0@NhPX5+&keqC#MaV;ouuD*c{P36iEJ1pvDqrv z#@o)*vqh7WD=;TNJ7)h6bJE-2KFzo}O);nVfX;Y=k+<=IzDzR2Qb5;BvVY~Z^v3;g9)>ld`JPi%7X3vMyWoQ$v^ zAvq}pe|f@TbCz>XCR>zTRnWrA^lUX@POiBV;uhygf1-trJxgFtQhA%hoYeO%_WkMm zNp5Z?C#m2sSNWg$Gbrtq^=M&Mv~Y9aZ}`hz>JIe_TG&@RK+je*_zTR58Y~qW7CMF& zmO~3qg>8|Fk%_bjE|Qa}|HGU#66WF-lhU&-wLGw-wzf2xlZ;|(n3I?PNltp%x7feh zb2|p|LKH^9oVaj{Q$3eG9{9@{-m1Ki3qH48Q=TSY zr)R6@pXI;pPl#JwsN6M^ljVU2fwXE%b(P7Sbkx>rZ?r5VCmU(hvyz-_rA5exTii>F z5M@sGMZ%HdFek_9*~%MZU``zLY*S%Q;_yOd@j~KRYguRG788l}#D(;1DIk=8v)$vn zuo+tT$es~Gc^%0~CYX~AH0s&V!fo_y`P}{7yJ*z&p@n}c@Ln!~w z3n?rADxZ)I+~RouDUy>Yb8=CU0@VZ41J`~eCkfHQ`DkG>l9Oe@hiGA|&?>YrL%0L{ z<(qKkNOvtR}+1N}@Qn^~vB0O$1*3KX%Suv`RLiUTfX8J2hy|2*21{OgJOu}WE9z=U@t>* za@uZnRK_h{re~||oIs=QcGY#wblr3%A~~7se&~+Rcj0{L3Cu|=&q@g8jPz_9yiI+} zeUE%;0B2mIyK$hAmZy)K0E9X$bBxB&h#shONS5mH*(n8`^7YkTW@l9SA|2rV-ud1d zXyFyU3v2OR_y@^J6SBp}5Xx`{2llTioIN>?}afw$CNI3Y*D^W+o@Ulbn?EjHYL^ zc`JA)drQzFobVaGiZCZJ+^ zgPo!sLH_S-^lQ~gvi$je=Xkp18$;oKTIWsvKYrXn|If;u~ zoMXEMf7!skz<$r34CZ7BZZVCsrE|6OsWZKqoV@3S^l)#&E#`ty-Y$KW@|wws-&4pt z#Cs6tWDm(nAqeIDascLJ$Peb^I4wd&T7jo4ltRMVz|X4W^yt@JSGaZva|@N zNKPu7%!%7k!!eB(A&#?-a}F;gk*guh$vxLk@R!R>=A^Z>iWiaz=474c4cTH>l9Sf( zmoI!7&E(`AEkalScK_de7xqL8Khq-g|G}IbQA28JwD5!`1SvvHtF;^a<#W7{D)ej@T`sh6D*R;}+~RBq<%DK(a>tXBY;l>Hoc!ra zA~!+{@5w1hPL}Xpm;&ZxmGT0&7?Yf2ReM8aeN}Uyg}dq53ZjL3;4cfKg@;1nP^s{U z@JR^e3X!pqvk^OPaWct?3;r^ioW#K`&Jpei32D^lTkf05$ujF-FemNAl_qo2(YB87 z!c6w=XyHewtiDiLK1Y6fwtY@NS~$dY$Q6P)8OatQ;;u-~c2=^{B21!1aC>Xu7AyM3 zqJ=hEgh}!hS@PHN&oG&jdL$=z=-HYC7L%N$Hkp%0YC4lSd8uU#b~Krj>=4RZLmxwV z!hPu3eBlDL2>T$Ei|E7jLug?cdbX4FY!zTm&IuxGoylmS1amSS{xV){a*~W}aWRB) zN^`CAz@FaG(y`Qy0+pLb3-UcnUnldfB4I2ax&O+h(^7bca-<2cStOA zGE6=~a#G4a8s@}mu654vUHCmYsj1Flt&@PBEy|oklas~4`@s|t%1cR3(uCW>U%tRC zb|qW<7|BeFu!R;OkI{#2nFeiOz5x)A1 zDE(vCI>TA(7!b;1U{1a#C(*Uel;9=!%b(4)PJ(cq@ch{1WGOvcYQ34h+)PfQ%*hKQ zBh1NK;R9|ls)g_PF6?354WXQu@4|he0)IJ}47&$^UNg_3r7D@M{pXk}XuXR?Sg^PU;SnIT4t@A`qPtUg2|H_|H>8`BdyD%Hf z$qw9NetNdu=2~Zd_+H_9r!&llw{d~xPr zi?E&KBwuWDQkWLupcIix(X*ZML_8Jg+0K%j9D`6UCy$a($~J#_l9RLWm(`RhFeegP zI1@rS5l!?WGdXEO&-O@5L2~k)Ia$M6CliG7mhfv@gsze8=31wZz86BdD1`E1!*3La zIf*7GCHO8pW)ZFBX%Q~q7Hf(VNKPd9%V}s~Tzh?(lUrzEBU*$9xWyK<2!EN($tu@N zS4MiaP3~8;2;Erge8DaD^K6H|%;Oyjq1+d@_|07F?1DKdNQ-cgY_YU51pYEY&o(Y_ zj25ASxz@46oJ^%>i%ZWoD|i#P*pRi(pD-s)aElMZDQOXwN1oyqJJ7Sep=av?bMnr} z0e=}?>*Tfcw(Pb1V=0VVJV0_%O#D?m0-;>WHk#x_Knq9NFX0wz{8;NuM+@V)8n|ZD zs3)RP|2H{#1b^9z7U4N=F`AsTrf2)#k zPI|T-@Rxbe!rk<2h3VN2*j1R5p^l@Dkh#`5ffkl^O>&(^3#+i!x#IRfD9?g9N#v2<>#z*+L4?*HO0mt-Qh1kqJ_PJ z`-5N6!ojo%TBt;LDEy_4TO5yDbkeg;)=%q_nVek4E!M#;-o`C9qG!8rNknq8$oeog zIf*hS?Qn~4$riig7XOAh>46r0rf2I9mF065bPZ&!qmY~oK?^l^Ica$8T4xL`g56v7 z$67~}tH|T!i}Y;&CMUC5>m&};gTMTfwN6uYsrrBxp*j5J6OxnYTIUttg`MCp--mLV zYn@Nwe35>*ML&e{Ad-^+EyAzxml1QVa}q7Az;gA1#fBD6!Yz8l+TslHmKYx`oX>JK z3Ezba`7TU>7DkzqG_(jSS+1sY^&ngP0CUm}=H#P04_dgxT1Z(zf3K5WY6}7Y_S`J@(0#Bz2GmuKq&Wj?8Yq? zflxl|3^@N~PR6)TxJ9XgG(kEqInCtc65oZ@;V&zZoLq)bt|d>EugP)!bs?1R(nL2^ z=CRg^GAGL+l+)9*ts`5^O18L>o-H%qg=^8mY@t3dCtpJOe=oh=z8AOZVXNxeH7D4xvLJN<>Umo@aVNQmjg}PiG=H!&$sZ?N#a8B{W zCMRB&t20@yMwycZ+5;_duoW-lDQ>YHJ=@DrTC{K-FC-f;WHW9tyWSiA@)OKSKVvUi zSctXGVccQ~%W$+%Cpj5Oix5ptCgK()TUGeW%RkmSiE)by%;cnzb2%?0ovW#9t?Ln6 zgf=86FWlLrPH5pfw6KR~2Wy>t-oD2Li0k`Xw>V47lrSVoHU_DcuddMhMw&?TG-xLZ@i*s>x>pg z*E(Hk5k8vC$v)g-5t5TAa}r(a9JA>^n3HI7a?#;%*2FDdcE)qnbj_t_OK37D_jw`B zaf{KlPFu3YSFCk9de_D#C+SE|*2vG~O#b$?2rvD)lupVvX8|dt0X6NaErI}L`FknzHuKyxe5H`eZC7@ zK`2L=laAIkXklit8~o*aF}JM;Yn?AJC%@Qt!e17oML5K^yQFg%ErRa+&YV<43(vXT zQgzlk*C3SZcxFK;C-T-q3#+1qmq|`)!(aYEix6c_9{7{NUoJ)qQ<%xg3kcvYF0ehBA+IoTQc2QBQwci~sPgz*df<@e+yB2K8IVZWSxv#bcsKUQ(~Eu znKbHA<|LY&{N!lrSVnS^n&e~+gmNYbDYoNR`_%#B;zqkMrm832E&z?=+XxvH{U9j=|!46QK+op%R5X(l2`!w?a&?^VywA>BXR>@* z_K=)Rhrf)c)c=v3EQ($0tWf_l*E(yUva-^%ZNV+(V$ZfC^miz)nViTF%7f|IG(sE$#4X0hEzUFVoHR7=oTMRJT*C`V&st|yEOQcF z>tsd?H{lke$;mFZ-T7nJIz>Idc#guHl%i)liCaAE^ZSak);Y))p%`0)WB%x!lkw)A zlWKv9vQnuY`NlsS7oMbealXnoxF>9SX+&S50 ze1*Rp0CVCOiqW$jGVh#>vHlKoQl8}Gf@p!i91nBiie2l(Bqw*+b~kn|a6W)gZW)`L zw4-NxMbFj==H$JUkw$&J=L>GJFNAVe-+Ht#JKOG^P+9p&PIl2E;~t3uBlQC;a7flR1e=PLf0#MV3VFlAJW*yYP{o-e?7X`Hbaidzh2g z@R!{zTVPId(X;KQXDbxD)+r2gawIl6Ibq&88ONOy2X{`Q$%)rhBX+G*2e%kaP8xCN z*IY@lb$iWY8AKA6eLc9S{jtM1{26xI6h zUFf4l7!*7f44KKvDUy>)XyNIwM9(%Ya+#j3F3ibwwD4z^tJi4M>j}$P>!h+YBRTnt zJ16Z}>%6pP5<9?Oz7eyrT;0HTVRqI!J7^IKI{Kl7(d1+(ZZYI6zR)dA7-%)b}qSIY|a{5?$-0Vy&~nOitS37N6r5 zJFr}RM{?4Wr8uffM>ife1_{*V@qx5WL^pV^-u^MHKNwLYvWZ{b7rcs~9 zos;<1y4Lw-a#Ei=CwJ-DTJb_&kS(^yExxp8piy53a}vFCvKcMR?ixUH61{UWFm|mo zR5}WwT#jw`Y20E3n3MC~!SI)wuL4xoX|%Ase==?{4sLN4gmPSSt#h3_Ck-K#@3Yov zf)+mD&Phv?IY|wFxf1>|6a3`{n3L@EY&-d$%CGk#Ir+|$G;QgUZU{?(m;GCoyZCT@cDq=Hw7B zWS8$F%t=3bwr|`y8R$Pua#D&Ha$E`1vyCzDoK#}leHlVIdgtUST39woCUaf?yrB&E=T7U7YQk)CZW$w>yZForqlA#VL~=j5xc2;1(%KbVss z%hh4rry79r-&$!@a6!XzjAg1%tE&=8W7AlvQ{^lU<;6mBuP)~TRRFz=jHHKwuc zjw{rlMYs-s*}yUf{xT`s?xncJl(@y^;!_CawzLS(S?hFUt@D-^p_^kHT9^y|GJ5AE z%AD+TX|5vf;qJq<2&HHdPD%n=IPQP$oSgQFtaZk-MR2fOoywh)xVXhRY`YT#8bK)E z$1O(hoIHX#X=UCyNy}O%nw8XCZ`gGJ7NYGPLl2*E%oYFFUw4LnvpXXWPzNrvN?MUI^vF+&PIRC&h4! zzoUhFW7j%IAe76HEuLnrQ;s_)rxcMpC*xSII@Rj`lbl4ElR4b{N<@pWF!UF0u?@@B zC-9f8;V)m}7Q4jWIf*7GpGZ#nvF(;2lz)N0^wS~?MGJM-I%8o@M3$@LxcOz{=GP?F zI-dXBIhpUg1Ao~B{_+7gzgm!-JVp!KN^7K7XknMwJ15=I!kFYF3;g9qT7>K*CtJDV zke3!Adgr8Q;1`$^75;Jvje3yeWVCjQZFi;Mgy2O8`tTpo{L7kxpNX_PNK<45awhA$%(;QXEa)96{-m1g^Rew z8falmauRdrq`tU-n_oY{oGd3fNn>weUrBP3p5$aTcTO@myTP1%AUWy5a`hux*c&bU zX0CM(N&%RY=$(_0ryOqa3_aT+Zhn=ZMfe@JSO&LvmY%H|gz^;#<(e=jR|9cr5$4b$ zB+?q1cTSSy7MJrv(uG=t*6>0y;}$p4v*q9t&}QzO2YcOsxOtv_h z7hNY-Jc||~0WHEDT7*Qj2#cJLohf41I%&CcvKF_P zMe59*lfR|xo?f19xWzoNcTP5=g}LP3|4B|1_{+h{5!_;_*yN-%yS(FU5i0#y>r4$^ zXRT8wG$(Y+TUdTbN z;uWQ5JA@XNFq4xAcTPq_C|h7o{$1-_A~~rIb8?I1q#ifFZoywRmX=75q?G2Jljoi^ z+&NhVf4PW8JvmyqTz<)&lbE$mHl-^q!doRj+2U@l;^kKd;uck|;thk!3Tq{U!)Xzs zcTUF8vpK>QW7j%0P39yXYn{0e$_b6eW^$4gEnF=8gWKM2#38*3b z7ZSa5(vk0}xAx3v;U<$g>1nQY^5Pcv(6dF?ItNKkilT*w*&>wmjOT?oU`{4_OTnBR z^I7F`taZ-e7OVLuqJ=J&tJBT3PCf3N+{G<6Q5UNB)D*0Be&fzbTHNBg;1jg4EiJ+e z_{&b=?Jy@X$;nsNI=}EjG`$ep?jsP&rOi7h7E5XK&WVF<_hc>sNw~!s;uZMII;?eW zLnt?fP>wPu%^XV|kGXTwmTd6_JzHlk0sU<`e+dba>bz+{AJ9Y zlYJ(061{Vx`O7N9Vw01x5XvrkwkUJr#Vt-V@0`>#*E)&0bFw&=Ia$IkFF98nmZOE~ z(ZbcV2pPHJun8^9DfEHL`UaIXke7j<*3bH*l;oQz|OAac=Y5?h2g z+&P)Way0=hLNqx^5_{()4STjV5Xw>JB<9XZH{4<;sI1o{CtX?Vyr)IzYTh}CS?hc= z@0{!p1X!;A%33F=mLWMgp;?0EaEoWTiWj|ea)oVoZQSBDT7+6GS8u_bG=@-qK+o2K zp6xL=zgp6$KSK*UTGmY=?LuCG7*vmxY--*)na@?c#9VQh&vG?s>{=%SSMk=6oTP`p zT*u9?>}of4n|bG?4_EP`$;rUrUYL_YtaT33A{2+eJPLnVhAqNrn3HO_#Var;Khq*y zMGI@Ag|}I*Hnc2;%1RBDwH!h@^^ZFz?OCqA#w~W|DqfU1>BCh#AB6HC+@gwG9BMKr z#o;fHvRo}Ijb*tidMd{`8W?r`U%rF}74mBqJ^y4LxHZFc}I97eWiKq!xf zIWepiaEoU}yREWqGB>~6FelS-iwRik%!4^eL~=5pn_o#{*E%WP?O5x)a;Igjvxej( zGyLUdT7(=VC)@Zg+(2@YjTT`GJzETO^37jR8H8JmCMQE_5j6PA5x7Nx7Ga!rPIJJV zMAtgeni;xN}jA2eX)3d!3veP1LqeaNewtFwz?xJE} z_)9--F?#1DVk?0b{!XJ_&M}UgUp8)jO=hhl(IP}I#Kv{kHItLXBqs~G5F5jsJVpy! z|7Wf9FLSbv79msYh1eWuVKh0(2XnHEwN3#p#O~Kr2<2hiIf*hS!$YTN5z2)pL1nok zRbfsp!<^L8XP6ga>!F3WjAXdQMXYs_(IWgta*~!iCo6gB>1fo~nipbw+BS3ZD<@j` zJvlkd^@9@5!RDQl(ykG>MXS3s8R>DfFuK;c2!C0F!d&nmvZwf9d2=r`kHNbSGL{nv>Y%e+k+p?3$eS)C&fWH)sipF^3ELZWWb0IdGoYaE9yvB01uDRApLeI7k{xT`|FPGS!k(_k0FQrjW z&Hc;O+`r6Zu66!~zwGYX%L^&^pX4NZA-1$<1UJ6~Z#nOH? zauQwZRHa3@XkLh&#hsJ*@R##gt|rl%#xf@@gDZl6v0QD7TYMeLXeKA`!Z}G!wz2Kb zOV73s=A#~hg+=44drWQax&d^lb)>sSMhGgUWmO9 za}rHXo;p*r*7?78PBx*1Ibcq9n0HPF(X;h5*E;!FuEt!59q2!V7Dn%!9N|K2X_AwZ zvNjtRgHCp(cIq3#}`6>27 ztjuz?KUx?~PJR^+qlKkt5l+FJd|&HS=H}Nq8uex(lV5QmwlmAsxAbg1xQh3go~=Ju@dEU0gVh7L z#S&(65-~5tM(>3$@2f)ImrNj z8FL}Fr?`!6cYa$>T7=IeCj;yU?Fwt1!K`(@Gba`<#Ey5Jb2+&AHJJ;sZnSVJH@~85 zojDN7iMfimkPERh(ZYCg6Wro`ISDPo5?X{PbFxf%siY2c3ap_;$PA$zy>pU7>jk0w zkCrDmfNi%wSb*=s10faWck%6~4zMw648-2A%1os)(nC-+R|WHD|r zEqk`r^la&QA?tY|(d1;a{f)WS+2!~f{<4>IFWc@S^lXP*ewdT!h1dv$@)&wH8+T47 zkeoPRP9}THp@rw@*{Yz0=ix7_k(^v(ty3EPEJ0mU#UGtCRJ4Y>pqUF$UGh5VbGWaQ4tIRjJL++r(ww&<@wL90+zd>aU<|)wl7EXXWpM*I%1bD^u^8hVu#V0y&qAZV4Y&C3TIVDDWiNhD;0t$72C&wVW7j%S=452xC|Xz+LirqSu?BAO5*K1? z1gGN`@&15nw-3bIqAf5^)1XvcaoE@xW)ds zMPF=kqN0Vrav?TiGAE}=PO7qJyF|}cgP!dwJzH(~%NtxvujgLC?+GOR!JI_bI!|cS z+j`e|n{y%dF9_v!-28e0q1-9<&PivOlMk$Q`a&rGV=^auVNQy$?LN#}r=)r3M321? zD~2nRoSZ`otHEDhqeZC8os(M-%Jq%K#%)@JCiHBNNKT?_oflli>%dy)l{Fg|Vz-L# z;4gcy)`>|@_VIfHMbN?ntaVD#vz_9Gaz*xRr+*|TE^dBJ=l2BS&>~Fp{K*aFM&?>) zCdo-WT7=p1ZM3ifTKFeg*p%etF%*iWSgwF1*?sqUJy``-zSM!jZ>?JuV%vxtZ%hheP2>DIsBtXwL47V7jXB)w_ z^pH{|Fp4`TF10-OFVCrQAe3j}7UKu&!JOO;#%H-Yj|;KUJ15Jy5SxnS>I&{(rscbE zz5W*Fq$?L^hO{Hi1ejzpi zRMvdlVp8^OOI?4sQn;Jp7N5|wwU$;&&!qI`os;itoi@0|SH5&yG+G^d=VYsS=Ol(X z`R`gM=0fa9k`qI#2%&tAs+qP|6X=>ZH+tjvG+e|XiO!DpL zwbo41`+dG2v9|MC2lj*fi)`7eA${<1T-@B_E72R_>``fLLs0fmuJ9_qHATUZJz-Z5MR zA6$e}G*^9Lex0VdT9M}JdA{^2xCnj_VlV2M6RoYIWlrLhlO;4))6(r;&1*4BWIGbd z($?t$^XoJDOGjI$uWg^sIXO&1xeR*(Cur*k=j1d#o1ea|Q=NqJHTDE*xz2ID3Fo8{ zKHC#xLim>pOi%IITJc(Z4)d!uj{0*;9=?#RZXfX3dg8NvhY&k}FC^5Xkmn%P)+vL} zcFHRZ7hwdPlOZT45!}MzFu$T`u8!pv8gSIL%t*y8S!i=^Kbh|%50_w(V@rykdF2dHBpC~7N$zOiwzpyWUVW?70j?&gC&n*l> zIjIQe}Ot!J!$KFCv(y#>;OJnQ5^OCiV!>6nK_Yd9skIQP#jEA)&JAh5zfgy zTWVg5EAZLU{X>X-t8eRkLOJOHA@&CeW!cvG3l(oLZ5@pedyLG9Mu?4tb23pWC)FUt zUdLyvL+0d$dlCq-fzZ;EDdprb`O6lHbK+1=mhoCl>&%=8A@(hfdS@Kwc`atw$c0f6K7m*X6Z5!S0{B*l_ z(OeZm>|Vt=8EiXZvywR(Nn6KGLV0}58E#=EsCbu2Wz{5=b)B|O9SE^^NGR7Qe|g6> zHEkUs#0uwRjVTxxp&f0VcdD%;oRggV7jC25T@YIOJ`&18h?Q-fxVFw1Tm*wsPR@Cc zqT6k!tuvO)iEQgkh7fDPXPafcO8&AAuf=;1V*gc6(r^oxN4;iSrvtR~x8yH7a|_?o zT@d`ehWKM2EORtSa zddr-K*Wyw#Cn=$&FNKz#4o7{p`$q_|UCEq$q^;B4b30VLe9+Rh%*kMslRhXX-$ROq z_9t@^LjH1y%AEK>#f!_Fn7D=0AjEn?#hb}3^dfUIS7lBbL@&feNC6>si7og)Z5>fg zy7OB6%4@NgBE-tJ&K~lYMWLl1Vq2#q|AmK*E+!w^I;U|F{AjM8gAiNAGE)&^>nK8O zB5t7&VpDoFCV%-DpRE;y*q2c8I(e<~`s9^4Ugjh#ufj$}@(<}&zfN1>(r&|E#IGA9$^oVe5No(UDto3_pz zloM~7tMkd6Xxln<>2}}4XKO-2`7tg+b22ASxrL6*NxSe(5MpyG<>ZS}PIgBA;uiLe zIt&S@6tBf2(3vYtcyNWNOSswXHJ)7eNTIvt91-T5QZ~QMPrO(nWYm z=A;$P)fcL*vyNMs&D@QIvb1$%Tjv|fNndW^AKE%YRpvw^#72Ag!u)b5Cl~2<*T84< z4;kxJPA;o$o!RUOB!qJ^hvsS`GA9e*oTPNNby~svdKHTA^rH@c;oeFSH&a)>_nOk@P<)j8a+YNj+$(-Ehf2s-FIuBIl zWVud=T?s8c1Duof_-tC{x81545GOjM&@KR-R_|wd!RU!P}@4v z))`52)sD|L5h|XUZueAuTW2<@Ea9BYkGw^5wLUv@56E9OCx7{rTiBBPzfqmQ0B@kcqifQwMYJjZ;QTUZlE z{U*vuBecaQbi13AzkI@Lu`S(hQBFFLzkI_j>Xjb3aEJL6(RObSQhe^>$!#5Rpvz6I=#4s zKU7;sBg77iIszfqv904v<|GK8tun90%TV#EL2Eo{s!434+0 z(?KW1c7=-f(NqARZ8yxXLUg+iLWnI*=Hxi9MIZ8)C)pDa&dFJoIho8YwBRC4^SX|5 zQb%P@rqD%jSDX`R>(qn!br*_5L%IkLa1ol5IeAIuq#b(#uOhP3?cU0sKpwb}+sT~d z;TCSgMJNFC>j2&EQc5|Iw$4bDlNh?)lVZ={B2?lQigHq&TX>cHWli#zH*nM&l2CqP zOlE3rTEZ>N$okYq`fS-PZRsMswd7WW*v}ARd&4>T?cCNW;W>onst{sF@>-P4$yi*3 z5m51>Ra@t5Xmn`huyJHg%=m26aS`0Og)?A&B|=*a#Ai#vp1@LkwzN^rq2j%aN=HI@ zoyweah^L(VAfY^fZueisIXS=*V+k@RM``PnGmKQqi4bCga1kogT)o0;(Lso? zIhmya`O637FPq{bJcaos%E@cCbvnTO63$5vl#}m#A$@4BYHgkU(9*ZZ%bXPE7Vam1 zSqh)+1U{RloR}hf$eaYh{Hh8S?z8vl15} z11`e){}5t#8-77c?@x2}H#>8KX|7sfehuTlFxpg+=IVKTw#t^N5Mtewaw2V=+PDaJ z=(9C}5c>$_q`96sX+!?<6}PaH_xgC-I;&xRWnyP;1Gg}@wFgwZZ{#og;UfGBF9sFw zFt5cjZ0npPl~tZSfwTB*{t#l%(p;^=w$3%3b8<^5C-Y!_B~h7^N8G~ZG*^RBPTG@D zeuvN2g|^OTUW>iZ7QdpL^q{%=lgx=mh%Lcu@u($|RMr^25QDp~`$Pz_uG~V|))D1o z7TY@BIO+jV@sg1_S?FCmWH#G631NQC3w;RZq;c3%`fQqV5{#qX8b|#F|Ap=OFZ{@B z(UCdPloKs;B5j@FycX>&F^(sp>=NUr6Jo2zPK~`n=0uc}8!ib+C`(%>soK_gNOQF* z`O9G1I_)3Yv){tJ)6{Hj2=`<%h7+B%n9J&ZNEg*W&w6wZkdVw))CBsB@;)s`pF(p#gP zyn*@E0Z08k3FRJa>wM=H_U0D;)VFm+IT^++?9VOy3-fCrU4$?Qu_I~g#G)-uw4TIK z_Y0pKevbTQ64auB5f|lNl|H3Cw95g~~Hk6Z%C?`3| zoNVS6=H5kjnRPGU(YPsBxVrMWtZojG?)4a*$1brQSPW@qlUTXG1of$qV2 z<|G(LUCW&0z-QY+pDhQsP}(|cNo8dZ?Wzc|IoX-pPPe;|wXfRN`Co+Cleh?4=ESTM zV!g><&eJ(3^KcQ8!8s8^Y#K5r%W1Br=e4*VhH?(}1h(>p;FNKAUXoB!>jFoY!I+m|si1 z8{s0{r>!HI69*yo1#KN6#ENp#8A9y)@PeeW_QOyvg3q>>|H2};2%?<$kjgrZ&*qDA za*F@L|DSSF9~a@aOKSE6mcaZ<3B_SK6bH$itR|I}#nhE0#xE=}_Jj~C+d6$9#LBkL zV0<$?OTpwvM!Qyx9|&7j`QwiM2k> z)%(_zycU<~gji|oWaJjEXNfTs!?auAqO|23a zRGgDv5Ml?QoJi(msA}tInUjGb$3sH6g~L!zqS+IO&pGkHXA?qf0+f?^5Mqm#V?jwI$(lkP~b$rO2 zoFH9Rf#&LYw8g4!)9~56crDI$zsW7E%W}wVZlQ2a9-*8x=fCh7nUi)<@q}|C%1N8h zm8z{H%877Jy3^K?ZJpluY(L1H^nri*leW$PT{#&>bJa$-dmIU6gUz4U;w5fjRq~gz zN?cpdoHT@%{s5n?8L!1>5Mo=BzkEs;p)JbEd$dJI=A;*|MJ;o(i!MSznydS`g|bTQ zP)>vpt8MF8JgcCbT&B5N6Xw?~wMrc5T^(Awa8ByMP`<}&u}N3}wDe@q(if9ZP9NTq zow;Y^FWaeY9Z^oU)9o$*LwS!ga}p9=jQr(6@|UGhPPDd;mN}^m6;D%6v{m9-+(OBm zG@#pkpVwkj2(iJWvRaY9e2#L`hS%aNMTp(3uM$gJC!bm+{=+RCNd7VeM}08=g^^@V z#ySbHmq;j|q1)}pEes-mSqY!*YM9Ad6VAzXe71ThCwJ5;@dEOfNnw61B7d2NTe#vs z%E>mC7<1EH-AZ${0I$WpF(J-X;?gc7(H8Bz79E7xN%(9gZs8O%CvK(&q_Q4B#cS-$ zoH#fqt4JtkCZW7etrB;k+x>;tVqdhy-+Unh73ZX|_Ym)c5MuWzVLPA+qiQ_9LFCoNspsn*ho^sL~ zpY1#O%YJO@gs9BP2@=Y_bh}UJoD)qsnZj$)4WDf~x6qyZ<#f6TUfjZYa88oqA}k_v zlAgtlwJ?;kD9*`Se70_MyW1(wNmeo^n@A|<;IG*>I>+d4IDGxSwrQBGu)IFROQN}8)nROX~Duf>12b%b-0m;B{6Tm)Gq z-a~V>C@#Vwy4_`=;+IjKvx z`xdvb0h_Ciw$5`B%I(RVywz8Ug%I17RpRgL3G~5dlg!CLmKa0yZ5=C_lhJxxM+mXT zn2I>+7sy{a+B&sd=FwbDOj{>VWloyAE=4)XpjL^WLQ8M02(j5{u5P4@klWH57vU$X z#C>6Y{lrBWfQt}{i!fXfVtq&`pM?-xiG;Fj>s0fe=G@j1&Pjabqz+w#o7}>BFu(4H zr(s)X1%0;6q_Q^BXUmDUxXDR~{T7{z=IRbygo1ERgb-U&DJS7-mG~s9#Imgu#A~q% zuf?lS@#?rv<-bt2b>`4qO<-!uYw;nsP*#bbp)I!NwfKTt*a79_Jw97knya7O^YL2T zN#-O!w{Wk%t#cF-P&t+uPkZ-cTPF-E-U#*tqSPv}WKJrmwvLuLxdIihCO+F$T!dOM zzivgQL|a_O7m^0f$ue$XD)^U6(MU5X<>UjIlmE7L2D*5%F@<31?R+9 zZR;4wUrwa0V;zh zPGx7#9Y=kZ$30$)O&|e1g>%wEWlqw2w<2@W7|zLKe74qnA+Mq0#kF-dkx0%3 zrz(#rX4DbZ}12t5xDThU?DENivj^g)qO8 za|@U7T1?MtaWy-08KI@G*EuKK=yn(2wYZ;DR&id7($*=#Ej-3+u>z^AAQH-wIT7XL zFtqeivXa2z-KD}31|I49?MEsAn-nOhjAoXj=fBXiQ2 zgz`g_ljgVx($;CC2(eknoUCI{AO{I$StZVkaw6M01-u8TRpPDOLdl%$BcbeACHCP9 z3F5U_k=LRSVk?q4IS1#&A406gIhjf3Br&w~K$MddycU;1#Y;)WcD~ zNB*)Y`O7EdFIzb?C!2UJt|W6J+d6Bwg_1eh%xf_(3FRFSV)L*ZvJ)4faJ;t85i%#` zqeh^d*rO`y+d5UC;)!xnM<>MAg>!O`woVfWu@C8XHzj`=%o3xtbzb2jbfCHV-c{N< z+sK?0Qp(8>_5=p9C*a7O*jQp51Lq|ED)D4)p_yAaU2#riTgSmUsX<#uQ%(Z7h1#}` za8BB=J|&!!j&!@>($UtLhtHOZRMv7{i)qPUu26*7w)kwX;9s^QfB6RGq^sK2k<5w4Igz%`U;YaR zlC%zi;xL@%s!b=v8gbMo!#NqvYtcYkXEKCXQ&=^qctVJ+tvDwM*%Mg6YcUlhAdPd< z25s>b-R_Pgl;5G8bcB}vo^72Twyo^Ukv)N)_-sEs^6**|<)jD+*0~&Rg!wfETDm*R$!xmaNulB`!e>jVwsoFFr-qik z3>P5-sVw1~*6yO)wsPD8hQInCAddgdf6ZJjObcISlzw39yD#*o(`ImuscrrVuMDJMTz zV(g-574$g_J z5`Tu4-UC|tS2!neZ5@Ylazw2XkA;e7aH~N6@;rSujdS9Taw4n5i9PGE#CR7Mp)r{g z+16>{y$t1K9xg%>wMzVqZg*?8bzYFa>_E5s9msVr{u&pDj#5H2);Z`;dZl&pVpJY#NznG<)mb>{MgXl(s#kQEnU1Gg}z z%A9<2FUS{i5QcI|UW*5nax#paxhPhN$B@e zg-;`Y>4A$NZJk6;LTocQCr?mLTGG~e8Jz*;B#v_;+d2-;Ngrl? zY-bc9cB0ChR58t9iP4KafjRoNP9VxjVz-tsl%JuTG)FlJCUepjLhM_Qte&0O6Zqtr z%c}><$rqSkJ)xy{Qme%I>9g&o+pTTugsQgA|J~LxsJ6}})~7T=Yy!I7^I(1@VU;)l z=2uc~;Ud-6X$>J(*ZzwDdPR=j5xtO8h%KFR$Jm z?93Hb+d7dXlt(D#q#VuFQ_#}=Z4+4zF_OQWfpU@nD&AZ;CyAlrEhKZ2O05zEHP#$bFzuHPENWA+es*EgxJ64BJ2qq)K`g5kiRSsAvVZ8*1aM-b7yf8 zDxsWQK{=_x65}mii;Z;7$yL?X3E&G!1{H4+nG=l=`;=SQhRn$;63UV}dCw}bgAm&r zpY1o@ZdoOkZ5>DEWE2VI7}`3cpg2UuR40{nh0IAU63Vw++{j7@J)_mO&Pgw$ zcLi>tWKK@uv-v{;I3Cp`{lh zb0W$~Nqn{=v~|iVl9anSXm_=X*{VoC!4N`YFp<$x3H_)*2z!i zWG_Bj5nhY?)hhAeh+}G%codnFm`LBK@lofZ4AE71EncR%`tK@nLYk`qv~`lR#3;&1 zTD402iZ7%yuf-24bFzh7m=i~RJGAtIxCjTJ;+2M>eB2xg^J|#pG*rBba8AxE%=OF;rUffMbE&nARe;hda7IjIygS#eHkK*hU3Lb;w=C6>&Ia86RVHdm{}sp%rD zAb*)zwRPT@ayr{O-Ek2dZ5`Rx8O*khgL7izwKxXlL^vlCA;g-ztLtqYStWL~b*e#2 zzY6n9I49aFaoo1f3)ZJPvc&j~J%R4f55Cf8>&c$LH(rZ<=yw0WMd)WgfO1lt{N*9K z-DP4&kvXx&R^S$%p{-LvwRJprEzaZ?O6Eiev58EL`9dC{oHQeq6>Lt+65|?OIax>k z(y^_R+oL!6%O4&E*_qo1A+`uE!a=V{MTk94TjwA?TN(BQPSEWxM?zU^>x`p|;KC~L zMA|y;5!LuFyn=F4o6L!9>onrEsI3wUAvT>_C4Q|kC+l$$vT+MHkvY*;iGR>s?N35E z%%vzU!a@EEOOd}6LTm-&I1)(Pgd*p}Dg zI}*yB(H7rv3p;sj_4*9+t2bXrXZ8d>d^NQwb2ex%I&dDbDmwCuv?jdth4Ca??>y(VrGAHG9 z&WWGe)-mdYSTiodjF_7-UgR%l(?v+EI44ip6KKsU@eA5IZBb5M(_HNYA@&2eurv9~ zk1R3v#%GglodK5pPC~3z&z#uYE3ir&M~Jm}RVSe=%1Irzb*l4Pyh%d2PUwu#+feZu zvp)3*pRJKIb0W$~2DWuJkWkJI31}OcliYkETX7Nc>dHwG+dvY^;kIIMPL4u|_2CxA zwRMbSPNuOZ;K`nVWKNQhP@YfzGBGYfAj(M!63UBBFX?u-MLBs%Tc@L1CC;umCtq<9 zdayJ19a_4yb^h>L91I~=I47fcEgHPba0`VHdz9CrFR#V3>`n^io+{>Hc?JKvL_(h zIvVFhTO}T-l#?yo!o2Lv?V+txj3vf{Q1MD}3y;!8D9bH8$gS#7^d9JbMBby4^EKD0}Lw#0klq1fnf!+d5C6;(qsoehU|&0d1WJWKLSbIeAGctG%wAw4;mgR;?0mBXd%Kgz{c|Hc?LYDMGAd zPJ|FU+U=ww#EyrGXMmPISduf@EPUFjlx`A0c97#)I(Fqkev1h;T3KAUTdFSqaTSqb{5BNeFlTdz4Lb(OoI>E+_Q1RCBg=B+@w}G9x>~K!D;jZJkm0Y<8uboa43V4=uekU;0UIp%7v(lTfZ1HicX0&1-QkE`qEQYsyIj z{tF*Oq{l@N&PhgGgtaIq+A8sTdU^k5PDD955EJHHB`(7)JnmxP7EUIitZ_~*a|^3; z3vb{eG%&>{#5y=9>D}6}ts{ik4p8w#Iq5Ec*WnAfOG3G!+Sbw9I*+)8 z&G^!v!Z~S=w)laBau>rUI48MXyE~N=+14rMTqPdLYcZ1M>S$hzu~6}Zb7F#)F55b8 z9(Cw;-zK44Uu8~2Ia%oSlx}w$NI*^S*&g5`G$McbFf=1nyfu6wnP7gc<`!lN?+Wwl z1I(|kP#ivyzw8b3>o1v;AyDzcc`Xj-wHO5Hklx9|$h)mq%b+iI0~ zF55cE@!6KK#F&oP;!2d0jJy`t(p=4M>ZG@IxRS`w=fmT z$#PtT^zbiNzt;!S^+BFSu!V;$edh` zM~JNtE&ZV}FnyYPS>%4)A*H!17^y0M`mpR!6LpdLPwjH6r`9cPT z?FkEEPhb#VdMLM0BgFc`Ik~`|Ks6G|mz;#y|Gi55goJV%y4`R1LOSt8Oj~C7jlIRe-K|tMF_DMSYoUe zHX-Z^ZJnAVl&@R8Nhk;KT1>`kG0>Sgd4bQ?1{dLZR5o6Vo1@=A#p^~w`MWI_J9EN0 zk+#l$Cm}W*D&82Vcm_imeOt$m=BjW`w9JXD63;f>HYH|>G0^;g*J4xJI*(y~wPai8 zrCUatt82+$X7T7oLir1O0^Qk}`|4TPt2fNAU*sa1pZeT9j4dwIMHIes$ut_ysCnca)RQs;wid#G;(+i?>Q#8s^t=nyZ>} z;(~HADf$x4)hf2RycU!2TAWYjM3j?xxCsAMPBO7dybeNa4)T}VSz^pjTgO3&-3`T| zu*#f7m`iaBkEpiJc()+(mzAA_*lGA|($<-)l#_b62zR|wLWq^jNr0}LEaVo-w$5_J zIcdvl@in)wBd$EYh&L)>(n*QV^1In+d6^pFOzW#7xG`25{ko8ZlQ2a*15gowb+e>@)z1VJt4$u z+d8}WFDwZ2>kvMh4?f!owMuN|77oQx7v*F$sVt+ltaS=~Hn;GKG*>V2TC7c-f{{ zzTjLXPC!CA5T9)p31x2*%5!)vCJL*|f8jmFIavtvD;4?6WlA||gNyKjTi6jo>}RNW zLWuo}i_n|q>QAV6gHTSaiV%C4TUe6j>Tw9Me)wz`Nhnt%p?sOPPBmPFt29?@qnzAk zl~^OhrZP2yiuZ)JPD`4rFKDi|qpkBswRN_WP|lCfwj1VGL6nn&ycWywT0BZyr!>s3 zquj!B-s8!f45zK5WloO4{PMw3KMm(3Zd+#-6bCPwtFur}5-a88k)AmTCUYW$*q6}K zJK8olm6PxGyfD9Z;v(dOf4M6*lGoxWJ##V|7a^8z_e5L-EpsAmom!@urfb~78n_5I z%qe&+F0?#CIcY)WTj!wS zoJd@uM*dxxq6$nPE!)f!L}6q7iyW4w(JSKCZXIlb}j#f zSzUVLvwhRco7$&2Fx#QTW1c;uY}|;1K63H6LJIPq&{t(M=UY6gaq^q<)pQBIkfcj zYFpkuVCtiFZ^I#|^ zgQ2{T%t>5ZM=~eR>2|lLt@9odP#3-sQBHbUHgOAcyY+Y5L36bb%&&uFPD(??6V8bb zoRbr{2<84E#E#(>#^SS0(AzrGQBFL#g)?D($+k`a%&(-hbplz@N`XeYTqneC;4uB&ndOi^_-tC{M3fV0>o``4PtjcUb7oGaxL$F#brR^AlN8VomYN^3t<#D= z+iOcIZs7`UVP?AB8{I#^{L(ll1(kC0gSL)jPC{s|4)i{S&vsC)5^HUpGSJdb@LDWq z9mf)*v~?!x+d7k-nUkB`LQzicLrZT8E&XwHT70&ZZ0lrnt`cj?NzT}wYLz%2E`mmg z9fXVU|0l#&rQ3a3=bYTom6JPam3R@W#HmOqFIU?-Z9P|`oMeJ?vdNh_kyTUtHe+ELRzCOzCl~;gmUthTi6lK$tS*$-h3fHcrEsYbMl97_Yk_>R=uqgg>s@1 zVjXRrn)KPOscoH^9yiHf)+KWiw@REAZBa5O0qo2rgNi5HI_daAR)xLPIVbPf6X=3+ z@)1Y92d~8+Fu#Nl8>gI<<`$md7W!}tPq8OZi9Xv!yS7T~$ei3%oRdJ8yD+~R<03pI zmDQSV_Y0JhHpY#7A-Qp)x0~L=zwD}%lR|tU``8mGqS`vbIgxE0;hc;nl@;URPq$kL zu~qf9PA#;>sv+aaoS3+UGgx9w$of{O=d~Du&o%^~P1-sm;G9J9S{y@jRoXfea1l)0LfO{whKd)!okNX5XJt=d1cX={%E?&1kiobJ z){xRVA+`dq#d8p1{dq0QDsfd_i`Q9VtV2TiE+nAFa84ewtZ!daxSmMq_+Cp!iP}t9BrLe zEHS>|wJ3zxcih4*E?aml<|CE0+wj#;m@i~MdjchREgm)gHTo#!B+^t~S5Evb6Ubk> z!oQr#YtbF$WEL($B3_HaIY~-$H4s{QO15=Yc?IJl2qCr!`OAkPnef?GaSPLvzg!dc zAuI>4Md6&}Q-s)WFu!_79E1c^5-Q$deU(@UvE}tu;>u)BF466-#h$=Ty4|&L)NjyS zZ5SI6`-oNIW)NbZ($;CE2(g****3bq!cp%;bM=!kk5W#)atnKtzx>H99B4U&a#8{p z;V>>jSvV)B$(&TeXS>7_qi{|xLx`=7&vpl&t-kjHzL42`A&KaA2jH_Mfe^b;=bS8s zmYzltV&8;kRLaRGNI*Tw@PFkCk!_t{Z0l&8lM?uB$82HoI42Y6vsq$&an#SnxA;gZNxoRhKGKT-c7(-=Vi*aoo zhjNm{T#x_4d%PCowslrISBW*{WD}VaO*#37i_izo$sh8UgJ6F3hWYiI*Wy5ZTSqb{ z5x58=xrNf!8IOx#pt(AcE`kXcVS41X$OI5#g>#ZPx{*>&9GR0e?98pSzqV&2f4PCz zVjh+lw~;x?3B_S66o-6pPU12r;dHx)<09Cg;%S_dieyeM;ImaHp?rhaVto?Icij>~ zhz;bmn2IIF6;ScgLB(6C2(j&za*_?@WHZXiYHnc`I444g&B3r=XB8Eg9C38{^hVogo#Y#}|By&;;TKXlnb*iv4cbQvQOL0z;z&Tk+TPHdHg^S3X z$hOXEe75+?$u_;Mvz=Aq!t4ngfODd?bwoKC#cR>Utt|hAXWU%eD?>{^PZyywT?FBr z)TE1W(=!QFyg(-*R@yqUO58X!5JIejbCQ9~$!e67%qS-tNhs%nbFwAk8%}gz+B&}? z3q=hea}vTTvBo(mqc|s`oQx-PV$$0>Zm~6aE#9KrU60qIZ0j^MEI>I)t}-XVigU7> z|H90?7T445&dPt`MqGq^7A*oTj;2DRdgIMGtP_Oq#2nG*{>GT1>`kaS`3_)a(f?~?=a zIqAu3Q3$cUa1k7tlTfI5!%QrgxC)dVmrBS$7jn+=488S>&Pl`7@3n{Xp1(!kTImP28ZmY zty2Oj-buRM< zc5j6n=^(`BrrW(strAOH$4WwZgy9gJ6Cc;%9I1}CO)w~un>B>nqT!c-AZxCX8 z;UfHibJCA)_g`ZPZsB2+lhWM66Kv~Lu#ANeYhY(?65VbyZJp_4PQ1up&LMx9$g>fd zlelf2w6t~BK*d`|w>urL#W>E%Te{s{P)Of1sLvyu>RZ~u+t@8pZUPpYk4=gcu<`%x^7Iq_l`32@zcQn$ktIV(2 z*69Eh?=82mGt93qZ0qzlX8<;+m=)<(aM&WdufnYKYRn{O-5$rAPi(&Do% zLpe!DTW2-OiN-nkca>O_lY+Pi`)IC8<|H?_a2NT@qG1EV4&$?xu@2R@bw;x@7ZdIe zL-{gy3_6cjB?UVtr8c2bFzzDSdfJBeh9IpxP>RUg}&Uv zlib4cG*^XlQk8D^4ca=jAjIAvq1=!@+oPC7IO+>|Eehvkxl&GAv!eBa{AEY9#ZUjN z5^I^0{xnzrnoE;VKF$~73l;A)RJ@8PCl}pa$ec`4ZJj!3i?=;Jpry}dIV3ThlO?3G z0z$4kw{@hgvn1>>`O6m8mAn=+lTcpIo*GPHM($>)cbT#ImiEN@Y%-sm#f0T!f4;zt*Ch?NUGoY&$}I46$Gi9g!nMZSK`>wKiS+Jolm7nGCU_PzFBbP)!SzZB(UnA+AU z&uj4%%~c=1^fTPTs=O9&;%4*x+t$9G*P?JvHmJ;rqpj1MTlkyI$v|#lsI#r3aZX%J zex?cJFHJDNrkStsTCB?#BHKE3VSYV;1k{|@;$!lc&A5fZYL$4c=PO)<4k#xdROVzG z-R=#1AvyR$w!r+#8`gu&$(OJqq_Pg+M3=;gKFTU_iHOk=M{p6!k-v0o>zrpfq%zIb zORN&t!e_fq7oiS2bNAR25YCBXmG~LAu&v8FsCc5BY{6&C>)K6aP70u$?4jFT#59Q4 zq9`XL&4QoW!uLGoEg@v~?yc<)jv`Md6&(=d~!xNfXu9Nd@O*nRi3-mk;Q6 z3nBIi|Ao!@FANULsyHXFp`~{S-wx*_pHfbKlFAyyYcWg_Vztc4i0I=eC*|N@$|`Y1 z63Q1zDA!*V0Sa0|CE zADNTAXp6yz@S56$6lNzB@*_jj0$$ZwQlJbQtfccdi z=9gqnQbKW9PFp7vuf_HFY+1=)ZlJA`mpy?!?93HnXKpW<6H!hM;uX>=!#S z_ADfzigXdqkx;HqD(fa0{`zG2@A6t~Nao}Luf=Ajg|u~2|D&8p=0w}p$?e`9LhMgo zi~ZHMP7#$k34!@F7+QKb+d8AUg+pkrMxdOG#AmbXZ5>yXlQ=@`b=o?0$zM7+Cl4Z% zaSIplUzma~eFfd_%q%gkquZU8ow-d)Iq4O%P3N5KqPbdFZR=RoD)BKA%D%3nXs+5^ ztI%h=OhUOPON=+@v(;f+N0gI#G*|ChQn)oHbMl1Di6|#8+%tHzXNgfbC!Jw_edM*+ z9a{QVI4Aw+v-NPU67MFVT!e)3ew35q{7)URhM}Ac&$0Q zAO+gu5?+g`>2@!(KOv#4DJPjpC~u^#lT)>IKEpZD+B*61*`%#gnlI#-Qci~9BG}?> z>rCdgXkkx4+t#VAl#_&Xy94+yOu{W(?D-fMp(P}s7y2r33vS`lkc^Ok)2?=W+dAR2bw))UBY#;odOWu=NqZ4zI3~Pkx=djA@+~CD7R2+>o_EUkOxBS9;kSQ^~{O1bq?#9lVh}Xgb;g*=4yGhN-WCB4411) zIho^JB^Kqx(bj3BD<|z)V*F^%%qsCFr*iVutuR!){ZR3WdJG|<9KmaG1U_2~sjP8u zPF%bzI@>x?A(hY;FNV6nIhjhg+mme_Y3n3peQLhSoYZG$?jDYM6I_I+k!iVwtDvO| zA$C1&om_OgrLB{fTezKDD4dghB$P{%P(F;$R)WmQ5t^&zAjFog>DBHKEREz4Bqqy;;3FWD35NVof)dp2Bzjr8(zdiH`4`yEHUANk8aUPbZQ z4nm0C$t^6zD)9mGm!)_uo+P1M4npint6eE4XIKvLCv$R%Zg+KKNGYREH zVl33n6xS>=T$@EulC( zr@7jJKHDdp=$>ecU-8*`;Mm^^v)b0V&bCe+ z)z*nqPMX5}s-r6>jbMH~j<>B7mpNG<{s|ILPn44{5&6*;cPr(jKd(h;>kMXFCoXeR z-abLKb^PI+oTH0Snf&E-+B$VnPHvLFtdGwogxJP>=?~~4G^2|U%q?uo=IT3|t6gcX zevQXD5#{7J%rD8Dgp*JnrB;c3xrN#)v9xt8ycTD%#5kE$mMOF{+d5ZhuGV6G>XzEp zakO<7!Tb_JtV20j3G*v6-R=!!PGnnWi{94RNpn?e>-@z<7{o0MfqyBP6I*Qgc$t%P z{1?h9@m0k+nXB45jmVrl)CsYVQBGQ-oIIzw+K%R`WKO!OZJpeT5c`vzxjrzze!%=1 z;B_3IEq>;tIJESmp%L7|5fEZ+VgA;!){CUFswzUPJFCRAlyXuB<>W32Wo=t0C7hF$ z_-vWj6If0DG86xW8X>kD-R^I+bu>b3A$+z2EHRd(xq1W_p^VC$2={V}1+``%X7bfHuE^xb#i_i?t$x9YDI-o7SBy-Y+TlhvPC);2s=Yf{K&AUrH z<>U*@uilDtQi%NJ0Voco!w1ntu#!0$4MW)_(vNQU1-jk-(9+LGd2$P~7cZC?^A8euc){))~Qnq226D zb5&M}E4xj0t`c9&DYsDD)>(;*u!zh_8kCb&ycRRl?Oqr5iq~Q% zl#|coFMEV<3;(LNb#|hh6hS#TqPKMp<06#CQ9lmz%NG~ntm2$V=0uc}>1tc2zEV!K zw$2m2kk))5FKO$vVQ228QcgA--{7-#!DsuV2(df)FU*UhzMDOP;^Z%nkU1$!=0sCY zCeZB`nyTTPIFAX-;$X2^5D`Z0o$%SBXDH z<{)#j1zLI@ZsE@8-_b=-P7XuGD{UXl&RnEw>zqP4si-n12A3)%l>hIxPBLQywsjsF zQ<6|#3g;vp`ODQPCz;7#Zm_(=QSXeS{*lZ{{8eJDt#b@*u^g!^StZsuC&O?NqC$K~ zD4$TAlSwQwTCA1mc3-5eQxhuQO?{R4p5mM=RGgD$YLz%6F2X8Yge*!qc@OhTTP4=o zI>I^8+B(JfFWk>9EXgfA2F0NqwDchU3o99?D$YqQe74&plm1iJCuhTL;g#^& zBy&;~<>Y##1&YHgI46ms>#9}aWzlTa;DeK-xMp$X|Lxh}AeJP3d+E=cF~SMNK(bhl`Mj|H8F2S92&r?9a%& zQT=!={)#FVJ&0``QBFqUvuUfur|gE9^0al%@>;B{R*5~;D)CJSv9+N%+~gKEP^-kE zoUAZDHD;o%vxaVWRk2F`i;v#&q6=sR?014${+(O};6yv|}D4VNgc`Z7&bPNc2#RVT!1tHk@rUzULRbrj~;K3`m7tJ1)+9)S?EMDX=IqS9q}wf-lXq%cXA^CmJg!}#rGIfPfQzt`{AD3BC;R9k6jy{;Epu{~ zR902G-B)=n*2HI%%ty5ukKkiTpix+L@|3FTH{ zt7+?KgxELMocL_pNGRv!wYZ(kNkM!zEpsxI*P^s_Mvys)j4p2*6HhrY#Z*<>I_`84 zX42M4>{5p=f|fa1s@giuP)>q*Ew*8aQETgL;uhxASBdjOh}}!(q^R2Tjz}0))D2zqE?Buw$2>aTWssp zCv$R_=Bf~4pWq@ihyB_5=6PGpr>GACoa zgS-dmgxKNSLOTg%A;cPR5hijA-FPiJ+B$QUa#D{k{cdC`nyZd&omH$7XQtb|kyYXx z_AW{}$rIC^ow@HZ`PC}1C?~`CLZbLW#;{5pgU>dG{H5Ks5>&iPMx&`3x9|$h)f#Y4 zZb8KpLhOA@a$bu|P)<_fBE)a&2jmfJ8@I3@ z3FR=f#bMS%Rx53t5$w#xgqOupKgG6AMQ-6mI43otrbOL>idPq(?QV2JT!cVgi)qxh z&O>ftbGiu6@!8t*T6|A)wF~*nPcFG}5w@#soxZO7NGO-!3pv4VcLn-vXHB6df3(FQ z63Tv-DZCclc`Z&SbK=I%+zecV1h@!up`|A#bFvUBUMiZansU;PwoWsh5Zjh+_d8Nq zU1+Yp56e#eawE4eXLw(woD?8`xu3R93EDb`xP^{Y;_|!}gSdrSTgSpJlx-c4m^yGy zZo>Sk$F|NxGW;!};yojw+y-s&H9lJ>UW@O!gLhN_7t+UVB)`@`mHC(L{ z`|w|Q0{&%rZsB>_I#r;hpND^04d&NPuS9BGt4h(>rBFDa|^8yI+NF;Cz+EOC?{TQ>&&Oyor*7HDGB9N5iKH?&_&QziC?la z*B<8ATN27$qPItXa%N5nLx|nS&Rh|eLk_SrSDIAT8D5JOT*lE{HE;_j(Ok8_IhjpD zIiaz(aW0vYBy_tMqMT@)lc(nNB$QWKUh!J&NLxo%i96#Wd?bI_6BpqpgxEp!*{r0p zhLcd%I438#g$KxA7KLbZfLmBPY>eWZ#BJ+LVQ0=nTW31A&^xl8-qvYKLir(t*e3iJ zK4x2|HOk3rTV@Ec8+k2i+dAKPE%u7tOVyFi7zg~S(KA1+``NFY|_@bh0j)3ZR;dO zIa#2$b(Sg4NjtTzlYv{f-sL@ zB3vPVSp(+Rb(mlExrGm$oRc(c>#Ww>Iw?b2g)U>2IDJ?fl#|zbTj!HC2l>m*igVHr zLaZn!1Gt5MxrIZ?oY;6Rjzc;5mk{e%CB7AtfF;Jj*qgB_@!6KpXG?2n!g9!CT!hxH zYf(bB*cC-(JT)o9DtWW0TE?tBs+`^|2 zVjap!2V8`=mRxS#+%`jT$VL8gI~0ckEHMh_q!eF>C?~$8vQG0_EKge}h_=o#T{$_4 za^lO*oG2%ianvtCh!y4J7JCBq$ei4z+ua00Y%mGs*4)D9tP-~+bMlJ(Wjit_AL(}Y zVo%_kU0Wso9a98t@dyd!(%izM&diD3;K!c8Ij3@BW@m1i=@zfWI*N0W5+`~Y+F~l2 ztBc8BriJ;nl3SPw=GR(}Pxx#-JU7!^%|}9c58ZBAB|e}lCyrHOjdNn<7LI^(5@q!b zAEh!Uei4%(#F`^3M^0mj(JQJt`O9l4C-upk+=p}0lqJTe`nFCm%&!*w7d}Th>4?uJ zgxDS=l)sa|>`ngiJO70PxP?~NVz>y0jZyIkvE!ko8))lHrQ7X=&o+nGVnSYvbID(7 z+d2=RI5dXh@Q7R3>K{VvDwLCqq3s~VzDHZ^rj(N$)?O$lU!kS{%w>xf?xP)bdwsr1! zC54K&5T9+XBE&jYiJPFD1go}=C?~=>S&z?_g(PxTUac*KQ2P3 zzO5r|oiX;)_-y_$<7n%+($<-x2(h(YX5u0wB9#?LTPGRYItyK&K*ejxD)9>v${qPa z-qG#u#LnD1G}6xcDsgYR-I6&O>b?gTp%|HyV=OWHLd81+=cIzZty9H&BE7ufq|2g1 zD)U+t<)kvV@QThkxlaDF4$am3ycS#Xg*=Z)$!l>XnUl=;Y_hGB4drAr+d8?(UvA~K zm=EUHE|_11;G7(c359bqJoXqqTRE4}ycS*JZRLLK^Xf+^4P6fLr(gT6#;m z-7m;rw&4~&!$oKdAy$-=o{Dp_R&h=wbMlE>*q!|4XZ{QO(AEjTXB&!gVht}%Tjyv* z3}49D$RN7i{wOEs6d`s7R6H-Xb>^a+BxIF10Oce_Od}``4^d9ERpRux2&=h;ah#JL zYLz&zu|G?Ue@Q40g83C@D#>f{s3OFUv797-=}Q;k47Bvha89l&#%s}2UnTaYxf;MNOrdj5(z>>Q5c|?K zJ^4$GbJ7t*^!~FWHb58#7TI`RD@RwUSgj*#~<8ON_Fu zGfC&1Ob@+Ex4Wil>m-8tr4eGAhA&Zs*wzs%c`asEnUgoT2%T{eKC|21hg8;2wsrcj zGxw9`>L3WQk~tZ{5~EEKVuRQdsLX5eGO4T@WKM1h%`fQs>DCeQuz03VG&DB00yLIK{0Nw6lUZbJn*}ck=IXOc@`4G3T1h2*8 z5MnFvT0BcaxeCh3C9B1$oCqQI7Rw>^_%FPNa?*(W<$eAOTi~<3rrX_#^{IE5a9+d6OIoOEGN;Iqn{>`=-{Uot1XAOZbETkIFQjpnLs>+Bx_pGYi3Vin$9_y8E;!h2(b&)woX%+Ur%@~wlb{1MaW2VbpxD}96BL3 zhsvD%=CwG0CB_hal{k`HI8trvNL%NO%AAZ-ZJlc5FRy#Lu`@S=Tjf1W=T_3q7WjSOqZJqR_veuz3W@AraBR-pOPPVZpkQYMi zcDEng!hYPszwSlIoE(G@TZ+tyC@1AmPJ+B*z5Kl=cway{In5X159j0@uf<9zCl_%M zs##}~P)^8eaRChFQ&WX0IQ{FHZhO)`E0?Q#6przMfPv91Pwgz;&MLB6`4lq9=p)8z} zCzdqq%&ov@%fxGOBMIdkDs%D$LTpdZ9o)hKv~>=!#8@&O=cEv~a9?OBdjdnag%Ko_ zg>w?4wsp=!#glCv$13p+63Vhle3#c^V|+GEIazFbhH}!H%*iXLcpdpdK0?Lo4k7ka zYyn6>`{}clG<1h(^n?86K-Z(LVI-7C;Ir9{zI3~T$edK9xq6oW!m4~BH)-qCMLD^F zi%=h*?I8)}<|LG#DMD#T?QwTv!8dR&C{x^nXGwod=>L%bHtL=1EiVuf>3 z9xC1icDt)7LafCmtHjrA3CLg0wcq8n*o1EPqnH#Vl$Y^ZOpDL9lAXECQ1LdfGnX9~ zLEF~prE^XOK*bA%iZ@hk>y+WOcmkiTJg>zdmKZCdoSf$tR`Zy~f1xLP0uJRwwslf^ zHzt26nUh=G!iH*FCk+YZmAn?yk-uC`w_6CY8*ve`A@}hhKtbOa}TuiqU0}+@LDY6Jp#^2fAW`qAjA&l7DhnD z6GCh(+dAWEt{R}FPhw|I%bZ+imAE$BI=9JRHpE4E$P%O0*2#c!vc~q3{AEY`I`WrU z=pt+)bCOrJbsWk`s3OE3VrQ-tF2XTxVR?Ku;hYE|_JYZsB}U1dc=2DTZR<25bMgQe zp}E@DNd?7WCCW(_I42uWPO`HzC)+x?P)@eSa}u{oyoT4JMu?SF;-0j1zQQ@_9kCnbq_Eo7 z31d%S82QU^mKewIT6DFQQ<)R9-4FidS-J>S=^|X?zpzg1JlZ;vIdN?3ETyd@gji|o zXv)baV^;W=n{W|wvnL>J9pRiDfQnZ_DJNF9a_+;pg&OB1$iw96=Q#}*!PBcUF2Y5a zUp3V#@ibnG-k~+n7VkiaZJ@Swl31JbS`21=ss;JWU>x<(wN#>+4 zKHE-(?xrF(t zZ5Y0-OZecRI-HYjVr%~HF!Mqk*LrZ@ZosG=NCSHqq@!58;t&=~d z4^+Hg+`|6kFaK~0he5@&b3?|HIWg#&6SL9ZI1Qi8UA1+t^IEJ674NP&DV!5WTW2ZC zNg6UIamvX@wXL(o^Bb$g{k*o3zm&F)tP*bv`9bDHwsn4lmLPw5Ff5$c;%Hur(JV2J z2|pbkOG0@9%r67^%PFd@qbVoxSBV$U%S+BJ)G{ZnW7a{4&7m?UZ({TDh3w?Dn9tDH zu+#9zP>8n9er}0h<^A;8iqmI1 zh>K7>a-_~V8Ablm4k30z^f{%ROeb^VVXujcaE;7K9Wp1kxrGh5h4*Q$HsQbU3AeD7 z%A8~)bFz_ya!!^Qw;I1g0_tnp1tGQ=3FX7)-{vxwLEOS{OF4Gt&cHdTpfV>WnyXWI zEehvkHhs1v>}>12fOFC@d?oqI4A9colR3!_ z|8h&@4{o7jTW1KFlkn&g(9)0DqHMnQ5%zQTD41VkP)>|6zox-C@q`c?pL3E-C&X%P zonV@)EqN`zK{@HnYw;ajgia_YU&x&FMLGEiA+|61%inNLhS1iDf{Hg5&Pgmj+eEK3 z-e&*6BOd22(gzS#Mb5uxdk_}0ovj{e71%pl(o#sVs_?Iqns?~7N(8rL@Mho z`OEfD9Nw`?+>KS@FYL_qp{?_qZnqF(!(&RsYwJknqyjF&IbMrZ)wYfW7hx8A0*RsG z1(@!el5h(bnIDr-ZpCZyg(W?ilQnLy@!7gS#rp~gs28imUlk#CA74muul_Vw!&%%I zO+tBK$Sy^Q9jw|qrMQJhlyWl0dY0FsKezB4x3DrU!Zo$6GfU5$1oB!;Nw-^8iQ_mY z($;xt&xOynjU~q1a89<;T+QP$5Gq~>J9EN0u^LK{P(DsV*_S9HcXCc1ISH|ut?jJqS)aEer=4GIVr#rqhwBsxedT)3+1&qlGkFidpUfz^L!zd z;&DzK+dBSaPOgR+*w&G@jwi3h*@_S=%8Az2Sq$eSE&0n8WKPoYU#JmcyP%wW!e{G+ z&-NV`p%==@Z!#ysISD6oGL(d}Ev78Z)l-UdGSTHc%ORC;)Gu-iYq`$i7HVys`zR-p zIgxE0StWkym0#nE5j0_mN}U~hTjY! zb~2e03$Mi)_-r2h7tX>(NXUO-K;$D{i_M~zMm<*BIxD$_>1~}!WqrbD>jvlKBQ8QW zGAG|+3gRN{fe>3%5n@AK%Hp$~B9&F1J%J!zi~g(dbhI7(DZ|g|rq#g<7drt%!zF4bdB8Xg1v6EvjurpVM|H3P@b?UGua0e=01J?y?>!dO^B7Z4_*p|2m zuX!zYB$f4!=Bg+sALw@XqTBrw<)japlOJ>u`s)n zc)qL>pH<3)Ra_^yUZ&e!lZ5hhl{uM5pDhV4f^bga zw{=#t#Fz;}>^gm0XA3@CZj_Vl?9An(i?EB$)k4tH_mRKc;pCkBp}9H$=2sZaRpFf2 z>9b9O1Y{v|G7aU#3vF>Ouf+r?C$rH=6QZ01atnoXvV_-STG~1*prvPIm3SkZliVv9WkskY9dnENoln!)^fsyHWWNo8dt zm9?2vRxSv!TghMM;udZuf0>WW$v)FxI48p(0ZHa$6y0tc-R^NHCob-l$X{M?a!$O+ zoXlcpE+O6S`EX8BK!{yJ{&Joo#5N{#@=#??R$2 zb)AJ@RB7LbXP6;oz*xIu)wK&7MMc3v*A@d6J9aJX&b6_-0~Hm!yRf?zYem*xcafQ4 zm|@_(?)#h>@Ohs1k2s&-eZFyh#VT<&cIH;HN?ZWtWG!8Ug3!`8L&X!T#M@+B=Qm!9 zf1{iXVNW1IZR=#roJ^#xqeVHHPFqLEf8k7gw#kW?*qLi&nvRR$iHjgICq_#fw8ckg ziy=u%lAb2z#AjPYLb*V4X!1s0i$!=XZs8XGjB>IAibGj$VYFN&9?lnHfpapNow+1# z;dr{;T1_qf3r~^1Y=Db!mF8+QnyWWmZJo^A!o{w(&NF)~ppX~x9pyPZYH6g?vXO*~?%$%f{8H_=N8sfw{_~0 zzdXw=tPkhpD&6j2y4^S3eNay3lfU$V;;;9>CPAOme*nrZlP%F^yanr zng6L_{7>~y+{i5~2LE!K=^IqMp(rN_>>^NSF&TSpBN-VZ@3|@`MoLomaX(2f$S&glY%jtIKq1(NN*J1%OCu`wfE>4VP zPoT4!Iq62X`z>vqo^0#kZ0nTc7VfqFgK{#QJ%J>AHo-Zuu}b`7TPKJ;fh!Ip zuf+vui&>>|a-aNV8&~FJEw9D=+`={FFAM5=lTd!IE1~bJ-$}Q-EXv6){tGL@IXOUE zrxGs0VQ!(H*I1SqQ+X{anUe;_Kh(C)9PeBBY`?Ot(}=c?$ec9AMYsw7vIVzLv~}94 ztHd4oFN}rx6-wshPnci5A;i9imfqJE%@E*eF`ys?umzk4fUW=1>EvCx0 zP7Gg2kY*-r9WVHob8r!S+I<>r}yKI|3E2x^X0&6D!^BadZ*v-u0p4U1W(-WKQbfBAk)R$y9R;4CThW7H^PH zZcgUpR#Fza-6C@$I43KUAMsxpg3tDX%t?3q259L&MYzQ+OwXJwr>&D8ZE*wIVj;;nd5g~$#(&}4v@*OFcdMKe zu}Yl2tusn@j9ci(Yw--P#d_{jGqiQQJsUwwzv-DtW=`%)&WRwz=7RaP0*XT}x(KUj zt`_9Ka3h?PRWQHuqnvDJx4Q)0?j8Sw5L*Qo;SkD6H3+fC$()E);*0ofigMx(^J|u> zoXmp|YlL&MfLoY7t!>&0I46P-yNb+70dC2XZ4{}j zB)Z+>NM+eQ{P;r7kvXYPLir+Xoj}>v@gj2~l#{Hy78gQG&x(t%TxL#g;35P=ak$Mb zY=?3ZYtD&_u*&iVX=6Pc6ZkbrjJvz2C*co+FgkvZ9qwpbO;$zhZeu}XZ5TUeW0 zc*da+VlR=uRFo5gZ0p?7WFmjLm~QuvtHgp3+g)wzq;Km)(bg%?Yf-EcS0sPA&&x_% zXRP5UoRiwdakvO#m3Xpu4C_-tv~_CpUwDeWlrF++l#^bxbw1by=VTXq0%aY8$zT5Ms0J197(QEdnK`kMIT;Tv zJ(X4BX*+kR5y>r6uR& zgP|g+EM;3~ILe6$pKTNg<)MlD*qN)sw$2fggohRGMCK%2Icdf%yb1rZ1-I}4ON<>@Vtn=kA$B8QNJix(eU-QuJ9F>JoDAd^ zekODB8_m^!<+jctC=Nn7Ic2rMIT3_dovkkah39b*8j`=fPPe;7%3NNHnIXh3C83;) z%*iTzwtTD-uR}RW=bZGwMR-SBX8^CoZzv~&xP{;3w$2fJwwin)C&--mkx&-OiQt@E zg!vWdHA~&rnWGY7mp}r_<=q+=;VC{_7qmqu=fv685v#;bLTtR{XSQ{=K}#=<&lU|8 zucB=0BybCdlTbF(TpeRSO`okE%E`GDH&%&f;v#smN<5oe=uJX7g8XGxsCY~8*>aG- zTmdaT4?f#!T!aF0TjwpxNiST4_iEMHR@bz5h< zOF8+QTR21#VkvpkBhK3Em3ak9MzaKwOC?23Fo9X`OC9%m3S)3iHANANBs(`#6mf_ z@=_AYxkzQL^nA_|V>i~PUXeKoHEcD!A%EG2RMuy{5a+heApQ%*D)C1W%7dZeePfk) zD7P?y{N-@+mu9uC;~=3t4Qt|)wa$Ik4q$!n|S^~{?Z5)FM{T3 z7MiPzB_TG1*Wyzs4k6IeUvLY1kjm=JEqu-`>cvJIb2C?^_wZ8#@q?djV(f^#Cab(+g<9nscVhKrC>(}CCGbJ{xH zSfBcngmReMW@zcf$ee8FwOAG^-d_DDx(I{0h2K@qiIr~mM81$zsCW}mP8=vF(`8$y zkyK8MG*=hEIr)jUj^LckL0inq7qS>aY*wk9JTd2BXKopedTt!`wJ^V&tHi~)h1*b0 z%D_3qnyb^uoEY%g7P8x&l|I{2w8flI z@mAoo<>D5u;I)|3GmI}J&a;42PTt`n^p$O$GHmPYMmZ_ND)Aov3oA>`$?vpv{$^Vz zoIL>xB%rZqi(*@6Jj#jPQlBNp3p7^)WLw7zD&8z^p@HV=d|U*D5c|lUD2}YDp`4jL zfyKNQv-4V9=JgP5u>;N3Sd^1cnyW8pu6Fg_;{A^GseW=>XJg_UmKa4_N30U}p}G3e zT$Z-Z9?L(LiYOTAvUk-(9%!9{1Tj# z3w$AgB$Ti5g*1l*)PT&1vaK_lgtE7}F`KKm(H2`5l#@2KK2`jjsT<->d-HPIH2;j`70 znUiqZIwrc^BXJQd5Msxe&%-&XZ<)%@oE!Pe>9`2)vaNI5MTpJ87qW^a#=Q29ycS=g zoOH|3)`@eJCZQZnDyuw8jQe>l`qI|f4T?m3Xae z>vY9udxLV)gUm@h%&$H)S3g3<8$_Qifjxndbh~XVZj2+LoUBjJoJ`@hsP_!OMYybH zPBIc=70!vWt@9F}tt+>%L*i1Dlbk3gVq2#G|AlLzr5EBBMoQ(RA1=aYmKc9$l~^bz z;mHS+E%e#O@LIIF2(fi#=0xuZ#6`Hy7t#U}&~4e)S;}iMC$Gg-nupNRJCMJ8F55aA zFCc%J&C&rXp0ceYR*Cal!>k*uadf-;LdAOzA+`_s%P(Y3 zhT3=A6Y$x@wvIWa8qL+?IO;XIg{Nt*)=isA=EPmD5?{e*3+A;bloKU$l1*;wJdvD} zm8x`9j9C#F*+`hg*1#w$4eY zc>W}m&*G^2lfOL2a!3Fa2eC@rjLgX$xk|iHRZdoL3v=;bxDw`9UYe`voRfEOPWqEj z7OTX95c>_~BwSr39!usV1uEV|wslgq^>7g`y17Adm_~EeU2f}S%$&3#q5PPHvREa4 z#?D-4T!hz>5WCe7PyVuxaVI`od77*H>9dKp&S4nJdlNr!3x9)_{tZIxa5yJPycWl> zCtxFUG6|neYpq9H=YrJ(7hw)<9Zy_@S#%M6P)-&}LagANJmMC1Ab%OlE$p7U9_Ck3 z2(eqzKBg7d43ur1GTI?zPW~lxG6J8?%4>0qR8DHiRpL~soQPH8bV6(d^aE#G$GNSe zC?~Is`SICA=A;c8hHtC3B*1PRh~k-jB~FGABo@W_-3WtPsQyb?ZZ)?UP$^+B#9J z5-XgOe_3K2PIJ|Si!c%wL1az@A=ZI%GMW6Pn~QVOjBTA;Mj!8%-Vu@z+m@ZVbV97i zoMht`E-}C2wU|*kiNj~>OIzooB*gB-MJTIsPJCg03C@Wx|Aj|UPW(wI$B zlSZ_4ZqV)imEG?9ycXNAC-6v{mFDUaZeeZ`%4>No7KHh=i7%uC-R^Dff00n`&l2NT z63XeElfx`AR)>~;ocv`S63XXEC^tYk5v#<3+`{^aV{s8u69Z6AF5n^r;UZk+7B+Wn z>nu)sAUP*1Sz^q~EnJO@P=Hn9Eqoz@a}o(H{TFuTc1q=BC~chtTm&Z}R^; zh;5yEC?_$bvYPT*yoqws4CUk=K3f}Bi65YxwB@z<2<4<5%&(`=(z}v5iNj}e5@P#7 zOIKEj4?xAMLMrQs_jhjL2$ge^Ky!5j%1IKOlQHVH&Lqn@Nr;_H{!#-i{SQfq6|2Nz zTSstC9?|U%k=r_X>2|M8d8Kkr-a3kN3%8|yAeA+Ugz`U-fWk>-eJ67=0uoS?TqQo@ zma482D{Y<2q_P^5P`-kT(8yx}djevWSY%GJL&aOB5@JQ>q%hiIBpLqF-k~gq#N#3e z&Pflt2=8za`ocMR4=uf)%$$^GXKoLB0+q>}9A#Tav~^CvIq^d|IY&adA+N<4Zebv| zP$9(5!$ru1i?E1Wn6a(12F^(VT!c*!VoOLu>^n(_jfRRRwsiy{))$}ch-~YOW|i3L zUKefgEcwfN(9$oUoCJ|jzCpLUIfU4o(9&D7O8kJ#i6F#2<+a$!XAPN?rL=W&!u(pn zEzE81W?s$aYCe`jHd@}1zwAwO^%FkZZ<2E&wsj6b#jDO2auO?!s-a88uA z&Qx3kg>xcSiJPa*gLC2}#O6dfSuVGAIzz>aC4Z@8PD;>c+kwwknmvIimP1N&3wPln zl=mD3=fvXTocI|gvL}#cs4tZhy?2n@)-ll5iQo&F$rs`&IVaa8Ay(PeX~lox1O5x! z@?ZFvbXg~taomJvEshn(ce4wo(I47TBeu=iuH~5#~@Gni= z!ZB>?*dWA;%!x)9ATuX=T!fi2bJ7gvm$FK{$i+DknUfHhU$JsqXA^B5!8wVfty6-{ z)$K69%92pt$1N0@lTzd_cbWd7trN}{V!>w{2MNedw|jij$s~u&oSel)2uz-eqppK< zGK*~;Z+kG!RiT`;rrZ6P{ACBnN^W6pT!ghGl#7x%*+N3OD31D8&1bsZzd^oa_m#rq5OY--DzE1dkLAjFQNtz&12aU!=+ zLvwXHo2yPjtQWU%F3hi=@Yz=JTFg%>YaL6B1+<;XoV?T)g^IV;Esj)HKh~!{(OezK zf8l5T3kSl#{N`R2LhKFkh-lC3@!Z*Ezxy4{obFVv(p;1*sYbJ7GS`VOzfmXdRliTvdv_?Nlx*;ebG%59zX>GJA{i+6^g?#xvitLb%b)Fv~^N=El%UL=nm&(2Fi)v63iEJn{Ib2 ze6|NkSy?4sW_?6+H6(czgxCVME-Z(<H>rI9pQ>+2=HwFpg@ODRUW1k%Omp=vwDdL* zVjp{DhnBvQ%t=0D7YMO$j0K^kZ(?Vz1XR48ycRd%vlT`;i8RI0Md%4FJ>Fai63{*} zCl#UM?dKLMgjg#(b7Q!L$=t&6wk!B-P0<#w^IB|5xBDiyuo*7GO}YrJNhm)~&6ULgJE^P$UW-G?oFqU?A3;JnNfKg3=A2DwC?{P}PTsn+s{h@C>&wkhabZm2;wGP8RT5%tCW@86=?m zkbu^bzZ9#)>)F;R%4>1E{tYfdFZZ3S5|?3TPADgpWLqbJgz{*V6FYkX6L~GBu_rK< zRF=-Qt<%_N7MYVtxCmNP5H7+MT!bd%FK@6)+?@R7JzNCQ)_KIvoM`JjM>z?F;_ymx zP9kmZ$(#(7ZJjb?PWI5&shB}IIReGO51;KkeYOU?7BAo;INLgn$zNVaIr)`@@*|xO z%~g>($?4t^pG~xNxQaP#NGv4PUF2W&h z;r}AUUb5(u8gL6QlTdDEolCbn3vC@ih|LP~YbkA=+%#8L;v(clIoZf-u^5??ZH{stP(eMpW}W5=2tL|`dyTh4tyam z*zN8@LOGUg9l<$yiHi_wj55ALBke&K;geKOqUp13r_WXbK0SiOh*VJ9AFu!`^@|(`Hpfjj8)?Al5=vD%t=l1m#4i_SS6l_a^hwTz(sJb z5?^O?wK=cFCNPw5@LFt6TjwsX#g_aR-X(w87S732xk{{T>x5Z1k~#S~xtF?1Jb+vH znf&EI{tLg*))_`ZS#VB^ulLTGAE*~Qx>01v~|jJ3-{q7R56aiXS2ajo`7{7Dn37FF=1DNW++^nDI@>zUlIGLa5!*To$zNuJb0P?_xoNJhk(`q-shkucp&Xg= z7tAlAoQPH8K{QvtrTUUNIY|DpN``Hnv#N4(!Noc8L^+woE%d@skC1I0p`1LyMG%~m z*R*xId99b6lU{VY-y4eKsBh!HuoTVJXt}Ku?z5k6ca&`F48}$HMnYNH)~N{*4 zjaxW~Tlfu%gR-qtk5tw=j)Zc3T!f3{FB_-K z;1+s7OP@>rG83=Gg=9{C;ubC=bCOTCb)ItzyJ|P$vlVme;kF&0trV}toe*Nn=!dY| z{T(V^IL*}r+B)G-94sg&<2_H&T&+X?@*K4E1~gZ%7(5}w&X%jht?=3I@QkvW;eYf%tl7oeO7 zLaei`vsz|OoSc*HG*|y5f7v573ZJbknUh^hI%1XBAXkZn za?;wdSZ?ct@LGI9pRF7JQ*TgCy2Jc>jf)VbjlyRu$)147oCwZ|AjDSCkEYw5q_4qi z@rz7@ zyyOe%hKukDLaei`)05`v2X^KZ<)j?9a4)y8GTrVYHjB)hoJ2YCldHs9wsoeHQ1;}t zI0w#&7ypIx*w)F4wzy1lms{AD%t@>^C%147-R`20fVQ(r{0qv-Ho2|y8_LO7ZsG5^ z2;XSygpXWadO!CH@1S%|JqV9+{JAG*><8b}!(DWMNMrf^K&f ze72>Qhcs8)L&bXv^Q#js!Yf{jy<}UbsNB~1L|bP7`ODAhwoU?^lVSW9nrN<0V0}uH zRudONY3oc?Gbgj;DsfY{2-c^vNJ8ubGADv_BDQt9sBN7vUW@S_McCGfq}yEz7a_70SsY zT!i-cY|nWuifx_OQaRZyGbjDn6ZkQ6BHB8YWm`vZPL#}vKl#hExCr&2I9$+q($<;9 z&YTy_uX#}MvdV28C3CXM^9jtaj@-f*aWqL|aE}>wKh(kWPp#LtAGL&DH4-T%E>hHm!9M==i;*&RYGhQl#?a62ss=b9m~0exo{Cy(?uvq{&EZX z%Mvh@qo6pHCZQY+ExjVQ@BluWuWp3ooYdeJp3>V?I&BJ9IO z@P+wx6rasc<($;v7M`NH>d$}SIrx_WP#i8hvZOYF;-IV&FNBu<6Wcl~$ebvglh?AX zvjyd(7=&1%oRp%ivs?c++d9MOb|zCk(Z=DwALvLM86V`r`utHgUeKa;;4gwK`$=VTPxq8)8fC?^hMZI&3% z;;7fdMY!bRoJ=5psl`Q@j*H-KX@<|H5Mmdw#F*XMid!g@lMZrQC%;rqUXZ^GC4VVa ziTgpt`-IOnNN(#?Ab)uf<-}KVPOKS}lPPjrrvb{zC0v9cT!d@<7Y6GW>Tj!@lc$h? zI@0ZaM*gx3KHHyUPI{p&#>>o!SS2ngw{-;PWH8D}0?e;rC@1~cnfuDN&Tw9fCc52X zl{gvB$vBu_HcJ4?$;Bi$wsmG&Ve|++$|~_O znyX@4$Jy4oVAI(H=pw|hO58YQJ_+TYSf5%dw{;ZdBqvln(bf^$Ivd&6`57u+B+5x~ zxBh60-|*Rn;Ik>p$w8=i)$!Sm;vxt_>q^)xa7a@rJOTAzM&Kf3XO(yjUq}&M2ORZS zC=T6euEycBiEW)vC?^ADTc-le)&1JG_wFN?KF?Qx6=_35XDsi;oE1Z+T#)HNLd^WL4Y{Nwu=X08b@(~isHE8Rc zfOArZRMvS?Sq(@iUnHR%lr#euK}Q#17R;|qC?|_iPO?C8Sja6D+d5*ExB$w@I$VUp za89<7P%fR?J9QUJjO9>H_VHR&2(cz;>4FfOME-KD+Zi$^^++gRWKW<0F2ZHK2VI2O zycRQiH1k*t2`C4z#g+JMxh3c116;xL%z>UUfO(bf@}lkswuH~=c%Wqh`#_-r>I#5S?dr`w$wLhM3l>0(=F zDf!DhsU2_;p408_mbRX@PGRzwo1mo^;}&kuuu5D>-PWnfp1?7EGOxu+Q1LV#b)<5l zgZVXsRboBNubH?AMplXE<052*f4PYKWp*eIE8(2vrMbFRW=@`?Ervo%kL4D2g_i!- zToj*e3ob$ll#^Y2A%b(VkLGG+T!cf(CX|y=w&Sv`Gm%@U5MnQ}#Mp%OshcP#!Mql4 zlget%`qV>Si|sVa`9cICR>_=naod8=R)U0br0y>g%0fADwspRfP!7jM_!k!RQ2qNs)~l+thnD`AZ*Mga~fo3~r$Z%&$4z!p!DhQBLmRsJG{}_?*{bXI6<{ z@>=XJm6KvDZbad;iB;mAWKPOL#S?_s%2GKo^I9C^I7a5Amdu=_rq<&Y3PNl{9QDgI zR~yk>y{XMa=41g&jH0cx6c-^U&D9m;FY|H>H%R5AH$K}3+B*I4*}m{v6ogp8ISJ>r zXyz7ul_h_on%ID7JN4q%MJTk}Iu^Z0qFJgs>d)OjDSI@_M=mg~^<3k*mc0VSc@be>sqZ zvOrUUm*lq2Of_>d6Bof-DkqP5Ep~ESEHfvaprt!ACvVu+>BVdD1Kn<+oP0((`JMdb zH*VoDy4@xc%3_t+sqm&)|tc?qE!j8 zN?YfOn-S$i5MncP3m3YSlc(-^QBKx*JSTG!3N8ILx3GuTc3z7m4gKV{PB~tSf)MMA za&kZtV#oL# zwoWAy$_KcGz9=V0@Y!n7);Vdl)7F`kd=}-z9~a>qZJj`N=5E+M$zRUq7G{!do%?jV zJMx9RpxfPD4COE_-uZva#ELW_gNUq0d%{s zpe;5gb8?-`NlQpT51`_;h7kKuZtE<;MaU&riCaU6eUO+77eUFKbTzLhpc`vodos zmH$E=%ONx5wob6mT%SOxoOs}~MVKz5oHQeUdB^;dMPyDM@>&#aome<0ow$WBAjJ0I zwHS}j)|*@Sj{m~m@Gq5B;)4)ktD`L*Cv)N?#EQ1gIalUH&n=t_=Oi( z7+QKRGAAn_#OB0BSVKa&h$O_mf|lMLibFiNZ~%J(U)d8-R*98u9kYvbQU`7E9LmWF z63Tw85}%;CS`$b8G?|kImg(xYj^Lbllge7eEzCx@dx^}PbU-;?D3@3Av2x+}MJ7IF)- z^IBYGe2j~rtP&R@p}d9HqR5;SAfdd`^cq@v82QUT%_Vs)I@>yXa1qMWT-|3)g!wgs z%!!3tIF_Bc6gVeS>9YytWOm9$@|TSqb0EZKX19AWUr07dhq#d;Mr&2i)nUlh} z2peF26{W2c#TQbJgz`RowhAaG(e7plu_M@-Gx1s+&1=!-=}%kdEXqlJnyVL3P6Eka zUNsu%BFy2x&`1|yfln~q?%Ps1S%A-$4JzJpsho&aVr5%rGs;OZYd8K2-{2zjq`CT@ z=Bm=xsep@ckR`_IDd9Nk7F>j}j#Cb2TSsJ0W=PISBWUSY*_msqT|`1TYX;8AYPNN9 z|Dc=*LToRO9r$deY3uB!+g%>!mrzbb=HxK6^y;*Aj*~g@=e2l_ZJqikCl}SWPF<*Y z840mXP)=@C>qc{RDztQ+t_jM?6=>;AxrKMgoU~z2;4!bo zPW0JcK#1*3{xTL9L2ypq@>=X=h{9(p#Vw4&Q7?;fa)>>F8b0B;2tyKg;UZLU5n@M4 z<)jAxg-7`>^h=tSbROj-&^m)|w+AkQXzO^{TC>FXfVNI+`*QXK@}#s+S;K3w5X#9$ zm|unXFWg9TwK&^4J5Wwau`{=uTUdcxxSv&GMLDst#5j)3iH)|-Bz!hEI46JLvw4v@ znI}0XEj;JaT=k*3x&Rj;8~=sNaMW{h3s;jlDNI`@()&*`C%wsEhT~oG6@=2`Q%}AvRq(iQyJD#znYJ{<4{7F{!Mdcr7l~KGEhtIa!H|;3UKr zqPe<>{AF>JlXOCCdgjErt>b4HV>perSm%e#i5K1O*|c>gk~wihIhoBZR5B+w&6(KN zS->sK!p_|PYU>myp}fr&kG9w!&dDdats^og<=L6r2lJ~Ev~(qNG8Pvhg>9WFC@0Rg zj?S$G+TvYai_K+QC%a2I=|JY>1yQ`;zVv?s=BSC#YLD-bJY_<>>To!%C^pZ ze6}`F9Gt7fqOB7qIVT0^B5dHluo!Kf9Wrwwl#^a$PTs=5>_g_{Z@!Qb<|wlXZBb-S zOx(he#*%ZQZ0p>%`|w&^KwBpZ`OC!)L5S^=x}42bC+DOn zwDc{w2tqm80U@@u+SaL{Dks&*oSdM~R+}ZpGjzM_Lx?@kEo^{`a9M8a%q5}h1Ls6! zPO=!=^ICkCK{@HlwoV(GtB)YWc0xIM#m-z9-R^jEVcI%dE$^Y?4Zvsn!Yc7#`fT5M zEsh|eoKA?XV;|2gOrzU9B_)Q}Vq<)^>rnBUk-rqmNh@B94f`TW1E$FHdgaeC>6ZUoChoK5)w_IVX>~g&{D%p0P968A9x9HFKgUCsAZh%HSgG z<`$MS3`aRJ8LF|ZbCQIzKUBQavaK@}<;0me8OtrSkvW+R^UH%(;@Os~WKM#ma*~P6 zNd%61CMXU|q2f6?C;7==u7mki7|zKySLQ@)>kQ_#_z$nep(rP&w5nuIj%w^`TPKaS z&J@}@LOBtf6CW=~)-3FYkE!sWacBX})lA)&ko z7a<3klT}dh@>@jaF+y_-&PgjcC-=C8ZQYi;wsl_W3hBG(x6sxpPUa-i{k^K3 zD4CP}ycVmXEh=rD(NOV{$zM(|o^}yp-N~H%fs3FJV(ZJcj+eTv<4w1FAwF9+cIK9l zP|j&>2lML*J9C|RExt|8YZHXncVtd7a!$T*3k4xIT{)?Ni*Sn9VjXDdr*IMK&|JMh z7r~i1X{w7*Gbc+(Wo3sDyOjK8PV$$lc`X*gXWI%xS#VCav#lePlPFw-(oh_BaSJPO z3kBz-8dSVv>MC(HUW>=@*=mtcKEW;YV_WBfR8FQQ#i*PUu}UmBCwEz5Y)e~5a8BCu zT8y>lR#%A?4~-&$1N0u*m!PX zKN8BH$X^a}wRMi_6ZN%RnUgWl((N8WB$Tg0#cN6`>n7S_E549>1|Qlwi+L^Pgmbc* z*J1$@%Ij$BETOHF%hVo6{VC1Wj<^W1xCmjib>8z@?4Pui=Bl%;Qw|p)np;@OrYI*h z*w#5_PnDUI)8sGflfS%#a?%*i$yJ)GjnfuMLToEIC-2rd19rL(r{uQI1UM(kw$5dXJNe5$Xs&ufahPwt z%WJV+@1bdNVogC ztF2??7Dh-ytZ3^z!Ds92SjOgRE*$l>V)yYsr4V8T=R^=< zEjqESa}v%;ZJ1vtNSD>-7GC1D*p%1eO}gDJpyJ)(7PjEO@E*${ZQx%D&Phi&C(p^8 z2<4<*;(Ah9g?TM1%1IA6C-2Cd^ua~=fQvAITlfXe$uOvRNsxd>lQ}WdTph*EoXsXy ziA7td0k`lX6o(*`lba5)N*uv0R91-}rDd0ylV{w*j^r<6VSXuX9g#WN#w{#^&lb&| zKzV5C`^jJWqMRHif9dBr0_K<5vjJ4Ri*QZ?>2_Zwq1>2Tc$Hh&jOOYsT!a?f!obA& zB$R!~oGid+%R%O3B~(16trJV;q$_>4w@~qVatq)67a_JHuf;=BIT4u?p`0k0lR7eU zqD48G4(G(3w$3bWp%-nP`Pw_=FMs70-lwe-LPA;LoUFo8&xea32(iUIdQ0V`6fQy( z%ORymm+gf4Ri4br5nhY6jU$X_S)Zz>5@H+Tvt6anc7ZP>0OjNyZJhw~OsIGU63TOB z=Am>489EEaX z&ag^60b07o&6zoA#47Q1UW+aHLhkD`)7BA$*qk0>mG~L2#m;Q&{7Ij!7e3ot9QB^~ zY$9{=yKx7~iD>KW5Yg62rL8jsB$PM9 zIVsF7++_Ly6;CK9pUh=&)OVwtRED8^jMrifGABn-PW+(aou%6yz_!jse6|MA(qqV9 zHir2nwso3w3-53X+u$NRg^Jf1pDh;UB$QkDT2mCCZM%yQ`_Zj5ZJk{(zbcYY7HysC zycSQOEsAZO)7-*3tP-E(ORtNIAXbSR!#TMo+d7L#C}-ssD#}S)m|ra+#NH!+sch@y zF^9l8dBJP3E18p*IO^SKuD(kWtHfekrveG(gDf#tg83!3b$sokXs()Ru8zS)NMV&& zQBE2_ak$8TVGzp64V4gk_kSoSU344CUy97hR{c9(i~UF_e{nBK{!(n~RDckB5JGGf zT!bU!FKZgc!8u9e3z?*5PNw0r8R&M;=Bi_n4mWh_2hIw97%N*qQ0vNX-rorZtd6Bwd$PKMA$_)h+E z6w4v$nG+`=_Ow(^CgUP#;GE1Lf9Z*fFb5YQ6OOu2PMq61x#66wA#+ktt`fgRTkH)L zFWyl~<(!nG+r5ihSPmEA0BxNbFqBWYI43q}=@Ynx4qapYGzhUC8QMA`bCM0^WC{7p zoM?+{pyK6+`LzztNg-n|<3_2R^x+o1=NA4(pRF%n$R~WZ{;sypUh_X@U&|0Q(geB) zqxeGXbh{_#g7MkzNIo zAb+`^=Bh8v)pX8@!yb?_+11t&%1KjoTPK*!)w|rnwruM>)#Tz9uEA$32o-NLyWPcg z-AE|M(OeaT*bm&o0jhE`RBr23hl+Q?wMv}I65}MAtEq-2>b!H}B zldHsHTgSkEp~5+72O-v}oTO(?1R*vODqcwv%26=CO5q|X%1JmobBVNdM&h&C>2^<| z+pSIWPn(8v;-+cjS|t{olT6&gg&8s@IruMJDYtb(xrMJ`e)VLD@twyn>?g=ozQcQt3(Um4F7T?&DG+@ev)%i zPOcJv@vh=Ch|EcUZsBJf_20;x{7dF!IIqP-{tJhbzqD`*C!m~Yt##p?T(at9=H!Z8 zC5~_rVjtMEr?e%1`Gh6LP`cf(9R*TDanxVQw$3(a>8042+XW$3C?|Wh|8NV#<+e_B zshlK3h#ilMV57M@2^T>J^Ghfv240JEJnxWD7TY>^xrMD!P9F1G3^A@Dp`nU45~DM7GLGHuGB>nNxvldr z%&(y=ha|8kFbd_w&bH1(wskb#{?O9TdAqBblgWwa64Md`c`aTw>BwKsq`7LKxf+4b z_7lp7ko5*MKaJ9AMqSIg2| zjV6Ctft|Sn-e$Q<>?Fkc!u&c!=A;T5=^=V~HDG?7ajgn+PnUkNnh5t)A@zsXoBA9X1N0T{8#zh#S)s?ydu2Ir(URJ?O({|8BlhkXD5 literal 0 HcmV?d00001 diff --git a/src/Dodge/Annotation.hs b/src/Dodge/Annotation.hs index fa34940b0..cc6805d43 100644 --- a/src/Dodge/Annotation.hs +++ b/src/Dodge/Annotation.hs @@ -21,7 +21,11 @@ addLock i t = do return $ addToTrunk newBefore [Node [Lock i] afterLock] {- | Add one corridor between each parent-child link of a tree of annotations. -} padWithCorridors :: Tree [Annotation g] -> Tree [Annotation g] -padWithCorridors (Node x xs) = Node [Corridor] [Node x (map padWithCorridors xs)] +padWithCorridors = padWithAno [Corridor] + +padWithAno :: [Annotation g] -> Tree [Annotation g] -> Tree [Annotation g] +padWithAno ano (Node x xs) = Node ano [Node x (map (padWithAno ano) xs)] + padSucWithCorridors :: Tree [Annotation g] -> Tree [Annotation g] padSucWithCorridors (Node x xs) = Node x (map padWithCorridors xs) @@ -35,9 +39,11 @@ randomPadCorridors (Node x xs) = do roomThenCorridor :: RandomGen g => Room -> State g (Tree (Either Room Room)) roomThenCorridor theRoom = fmap (\r -> Node (Left theRoom) [(pure . Right) r]) (randomiseOutLinks corridor) + {- | Create a random room tree structure from a list of annotations. -} anoToRoomTree :: RandomGen g => [Annotation g] -> State g (Tree (Either Room Room)) anoToRoomTree anos = case anos of + [AnoApplyInt i f] -> f i [SetLabel i randrm] -> do rm <- randrm return . connectRoom $ rm & rmLabel ?~ i @@ -57,7 +63,6 @@ anoToRoomTree anos = case anos of blockedC <- longBlockedCorridor join $ takeOne $ return (appendEitherTree branchWP [blockedC]) : replicate 5 weaponRoom [EndRoom] -> fmap (pure . Right) (telRoomLev 1) - [StartRoom] -> startRoom (SpecificRoom rt:_) -> rt (BossAno cr : _) -> do br <- bossRoom cr diff --git a/src/Dodge/Annotation/Data.hs b/src/Dodge/Annotation/Data.hs index 23cf7fa16..b34339ab3 100644 --- a/src/Dodge/Annotation/Data.hs +++ b/src/Dodge/Annotation/Data.hs @@ -13,12 +13,12 @@ data Annotation g | Corridor | AirlockAno | FirstWeapon - | StartRoom | EndRoom | OrAno [[Annotation g]] | SpecificRoom (State g (Tree (Either Room Room))) | BossAno Creature | TreasureAno [Creature] [Item] + | AnoApplyInt Int (Int -> State g (Tree (Either Room Room))) | SetLabel Int (State g Room) | UseLabel Int (State g Room) | ChainAnos [[Annotation g]] diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 17a5c21ec..d628ce460 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -35,7 +35,8 @@ import qualified Data.IntMap.Strict as IM initialAnoTree :: RandomGen g => Tree [Annotation g] initialAnoTree = padSucWithCorridors $ treeFromTrunk - [[StartRoom] + [[AnoApplyInt 0 startRoom] + , [AnoApplyInt 1 lasSensorTurretTest] -- ,[ChainAnos -- [[SetLabel 0 $ return $ roomRectAutoLinks 200 200 -- & rmExtPmnt ?~ triggerSwitchSPicLight (drawSwitchWire red red) diff --git a/src/Dodge/Placement/Instance/Sensor.hs b/src/Dodge/Placement/Instance/Sensor.hs index dd3795f02..a7aaa7d01 100644 --- a/src/Dodge/Placement/Instance/Sensor.hs +++ b/src/Dodge/Placement/Instance/Sensor.hs @@ -36,7 +36,7 @@ sensorUpdate :: (DamageType -> Either Int Int) -> Machine -> World -> World sensorUpdate damF mc w = w & machines . ix mcid %~ upmc & lightSources . ix lsid %~ upls where - upmc = ( mcSensor %~ \x' -> min 750 (max 0 (x' - 5 + newSense)) ) + upmc = ( mcSensor %~ \x' -> min 1000 (max 0 (x' - 5 + newSense)) ) . ( mcHP -~ sum dam ) . (mcDamage .~ []) x = _mcSensor mc @@ -44,7 +44,7 @@ sensorUpdate damF mc w = w & machines . ix mcid %~ upmc lsid = head (_mcLSs mc) (senseData,dam) = partitionEithers $ map damF $ _mcDamage mc newSense = sum senseData - ni = fromIntegral x / 500 + ni = fromIntegral x / 1000 upls = lsIntensity .~ V3 ni ni ni sensorSPic :: Machine -> SPic diff --git a/src/Dodge/Placement/Instance/Turret.hs b/src/Dodge/Placement/Instance/Turret.hs index 12b13cfa6..24ede014f 100644 --- a/src/Dodge/Placement/Instance/Turret.hs +++ b/src/Dodge/Placement/Instance/Turret.hs @@ -18,10 +18,10 @@ import Data.List import Control.Lens import qualified Data.IntMap.Strict as IM -putLasTurret :: Placement -putLasTurret = sps0 $ PutMachine blue (reverse $ square wdth) defaultMachine +putLasTurret :: Float -> Placement +putLasTurret rotSpeed = sps0 $ PutMachine blue (reverse $ square wdth) defaultMachine { _mcDraw = drawTurret - , _mcUpdate = updateTurret + , _mcUpdate = updateTurret rotSpeed , _mcType = lasTurret , _mcHP = 50000 } @@ -32,8 +32,8 @@ lasTurret = Turret , _tuFireTime = 0 } -updateTurret :: Machine -> World -> World -updateTurret mc w +updateTurret :: Float -> Machine -> World -> World +updateTurret rotSpeed mc w | _mcHP mc < 1 = w & machines %~ IM.delete mcid & deleteWallIDs (_mcWallIDs mc) & makeExplosionAt mcpos @@ -60,7 +60,7 @@ updateTurret mc w dam = sum $ map _dmAmount dams elecDam = sum $ map _dmAmount elecDams doTurn - | seesYou = machines . ix mcid . mcDir %~ turnTo 0.005 mcpos ypos + | seesYou = machines . ix mcid . mcDir %~ turnTo rotSpeed mcpos ypos | otherwise = id closeFireAngle = seesYou && angleVV (ypos -.- mcpos) (unitVectorAtAngle mcdir) < 1 updateFiringStatus diff --git a/src/Dodge/Room/RoadBlock.hs b/src/Dodge/Room/RoadBlock.hs index 9598aa412..d57cb4b38 100644 --- a/src/Dodge/Room/RoadBlock.hs +++ b/src/Dodge/Room/RoadBlock.hs @@ -97,7 +97,7 @@ lasTunnel = defaultRoom { _rmPolys = polys , _rmBound = polys , _rmLinks = [(V2 20 190,1.5* pi),(V2 0 20,0.5* pi)] - , _rmPmnts = [putLasTurret & plSpot .~ PS (V2 10 240) (1.5*pi) + , _rmPmnts = [putLasTurret 0.005 & plSpot .~ PS (V2 10 240) (1.5*pi) , midWall (rectNSEW 65 40 0 25) , mntLS vShape (V2 50 10) (V3 40 20 50) ] diff --git a/src/Dodge/Room/RunPast.hs b/src/Dodge/Room/RunPast.hs index f2ec84a04..e18c0d689 100644 --- a/src/Dodge/Room/RunPast.hs +++ b/src/Dodge/Room/RunPast.hs @@ -49,8 +49,8 @@ critRoom = corridorWallN { _rmRandPSs = [psRandRanges (15,25) (30,45) (pi,2*pi)] } -runPastRoom :: RandomGen g => State g (Tree (Either Room Room)) -runPastRoom = do +runPastRoom :: RandomGen g => Int -> State g (Tree (Either Room Room)) +runPastRoom i = do h <- state $ randomR (200,400::Float) theedgetest <- takeOne [horEdgeTest (<1), horEdgeTest (>39)] thels <- roomCritLS @@ -66,10 +66,10 @@ runPastRoom = do critroom = linkcor & rmPmnts %~ ( plRRpt 0 randC1 :) aswitchroom = corridorWallN {_rmExtPmnt = Just $ putLitButOnPosExtTrig red useLnkRoomPos - ,_rmLabel = Just 0 + ,_rmLabel = Just i ,_rmPmnts = [] } - switchdoor = switchDoorRoom & rmTakeFrom ?~ 0 + switchdoor = switchDoorRoom & rmTakeFrom ?~ i n = length $ filter theedgetest $ _rmLinks cenroom controom = treeFromPost [Left switchdoor,Left linkcor] (Right door) critrooms :: [Tree (Either Room Room)] diff --git a/src/Dodge/Room/Start.hs b/src/Dodge/Room/Start.hs index 7ffc32228..eb557e527 100644 --- a/src/Dodge/Room/Start.hs +++ b/src/Dodge/Room/Start.hs @@ -52,44 +52,51 @@ minigunfakeout = do centralLasTurret :: Room centralLasTurret = roomNgon 8 200 & rmPmnts .~ - [ putLasTurret - , heightWall 30 (rectNSEW (-90) (-110) 10 (-10)) - , spanColLightI 0.5 98 (V2 0 (-5)) (V2 0 5) + [ putLasTurret 0.02 + , heightWall 30 (rectNSEW (-90) (-110) 20 (-20)) + , mntLightLnkCond unusedLnkToPS + --, spanColLightI 0.5 98 (V2 0 (-5)) (V2 0 5) , psPt atFstLnkOut $ PutForeground $ colorSH yellow $ thinHighBar 0 (V2 20 (-1)) (V2 20 (-100)) <> thinHighBar 0 (V2 0 (-100)) (V2 20 (-100)) <> barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80) ] & rmExtPmnt ?~ - extTrigLitPos (atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18 (-2)), a))) + extTrigLitPos (atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a))) ( \tp -> Just $ lightSensor (upf $ fromJust $ _plMID tp) (atFstLnkOutShiftInward 100) ) where - upf trid mc w | _mcSensor mc > 90 = w & triggers . ix trid .~ const True + upf trid mc w | _mcSensor mc > 900 = w & triggers . ix trid .~ const True | otherwise = w + +lasSensorTurretTest :: RandomGen g => Int -> State g (Tree (Either Room Room)) +lasSensorTurretTest n = do + cenroom <- randomiseOutLinks $ centralLasTurret {_rmLabel = Just n} + let doorroom = switchDoorRoom {_rmTakeFrom = Just n} + return $ treeFromPost [Left cenroom,Left doorroom] (Right door) + rezThenLasTurret :: RandomGen g => State g (Tree (Either Room Room)) rezThenLasTurret = do rbox <- rezBoxStart cenroom <- randomiseOutLinks $ centralLasTurret {_rmLabel = Just 0} let doorroom = switchDoorRoom {_rmTakeFrom = Just 0} - contTree = treeFromPost [Left cenroom] (Right doorroom) + contTree = treeFromPost [Left cenroom,Left doorroom] (Right door) return $ rbox `appendEitherTree` [contTree] -startRoom :: RandomGen g => State g (Tree (Either Room Room)) -startRoom = join $ takeOne - [ rezThenLasTurret - --,minigunfakeout - --, rezBoxesWp - --, rezBoxesThenWeaponRoom - --, rezBoxThenWeaponRoom - --, rezBoxesWpCrit - --, runPastStart +startRoom :: RandomGen g => Int -> State g (Tree (Either Room Room)) +startRoom i = join $ takeOne + [ minigunfakeout + , rezBoxesWp + , rezBoxesThenWeaponRoom + , rezBoxThenWeaponRoom + , rezBoxesWpCrit + , runPastStart i ] -runPastStart :: RandomGen g => State g (Tree (Either Room Room)) -runPastStart = do +runPastStart :: RandomGen g => Int -> State g (Tree (Either Room Room)) +runPastStart i = do s <- rezBoxStart - rp <- runPastRoom + rp <- runPastRoom i return $ s `appendEitherTree` [rp] rezBoxStart :: RandomGen g => State g (Tree (Either Room Room)) @@ -214,7 +221,7 @@ startRoom' = do , tankSquare (dim orange) 50 50 , tankSquare (dim orange) 50 120 , lightSensor (const id) (PS (V2 (0.8*w) (0.25*h)) 0) - , putLasTurret & plSpot .~ PS (V2 (0.8*w) (0.8*h)) 0 + , putLasTurret 0.005 & plSpot .~ PS (V2 (0.8*w) (0.8*h)) 0 , sps0 $ PutForeground $ colorSH orange $ pipePP 2 (V3 50 50 25) (V3 50 120 25) ] thecol <- rezColor diff --git a/src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs b/src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs index 62161db51..5fa5753b7 100644 --- a/src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs +++ b/src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs @@ -1,137 +1,140 @@ --- generated at 2021-11-18 01:13:04.234031373 UTC +-- generated at 2021-11-21 23:26:56.911504724 UTC module Dodge.SoundLogic.ExternallyGeneratedSounds where import Sound.Data soundToVol :: SoundID -> Float soundToVol v = case _getSoundID v of 0 -> 5000 - 1 -> 8000 + 1 -> 5000 2 -> 8000 - 3 -> 5000 + 3 -> 8000 4 -> 5000 5 -> 5000 - 6 -> 3000 + 6 -> 5000 7 -> 3000 - 8 -> 4000 - 9 -> 5000 - 10 -> 10000 - 11 -> 8000 + 8 -> 3000 + 9 -> 4000 + 10 -> 5000 + 11 -> 10000 12 -> 8000 13 -> 8000 14 -> 8000 - 15 -> 10000 - 16 -> 3000 - 17 -> 4000 - 18 -> 5000 + 15 -> 8000 + 16 -> 10000 + 17 -> 3000 + 18 -> 4000 19 -> 5000 - 20 -> 20000 - 21 -> 4000 - 22 -> 10000 - 23 -> 8000 - 24 -> 4000 - 25 -> 2000 - 26 -> 6000 - 27 -> 500 - 28 -> 5000 - 29 -> 8000 + 20 -> 5000 + 21 -> 20000 + 22 -> 4000 + 23 -> 10000 + 24 -> 8000 + 25 -> 4000 + 26 -> 2000 + 27 -> 6000 + 28 -> 500 + 29 -> 5000 30 -> 8000 31 -> 8000 - 32 -> 5000 - 33 -> 8000 - 34 -> 4000 - 35 -> 3000 - 36 -> 8000 - 37 -> 2000 - 38 -> 10000 - 39 -> 5000 - 40 -> 2000 - 41 -> 3000 - 42 -> 12000 - 43 -> 5000 - 44 -> 10000 - 45 -> 12000 - 46 -> 2000 - 47 -> 3000 - 48 -> 8000 - 49 -> 5000 - 50 -> 2000 - 51 -> 3000 - 52 -> 10000 + 32 -> 8000 + 33 -> 5000 + 34 -> 8000 + 35 -> 4000 + 36 -> 3000 + 37 -> 8000 + 38 -> 2000 + 39 -> 10000 + 40 -> 5000 + 41 -> 2000 + 42 -> 3000 + 43 -> 12000 + 44 -> 5000 + 45 -> 10000 + 46 -> 12000 + 47 -> 2000 + 48 -> 3000 + 49 -> 8000 + 50 -> 5000 + 51 -> 2000 + 52 -> 3000 53 -> 10000 - 54 -> 3000 - 55 -> 15000 - 56 -> 10000 - 57 -> 3000 - 58 -> 15000 - 59 -> 10000 - 60 -> 8000 + 54 -> 10000 + 55 -> 3000 + 56 -> 15000 + 57 -> 10000 + 58 -> 3000 + 59 -> 15000 + 60 -> 10000 + 61 -> 8000 _ -> 50 soundToOnomato :: SoundID -> String soundToOnomato v = case _getSoundID v of - 0 -> "HNH" - 1 -> "CRNKL" - 2 -> "ZMM" - 3 -> "WE-OH" - 4 -> "UGGAUGGA" - 5 -> "KRTNKL" - 6 -> "DWAAH" - 7 -> "BWAH" - 8 -> "TIPTOP" - 9 -> "TINKLE" - 10 -> "TATATA" - 11 -> "CRSK" - 12 -> "CRNK" - 13 -> "TAKH" - 14 -> "CRUNK" - 15 -> "SCREE" - 16 -> "TNKTNKTNK" - 17 -> "TIPTAP" - 18 -> "WRR" - 19 -> "HSS" - 20 -> "BOOM" - 21 -> "CLNK" - 22 -> "BRAP" - 23 -> "CRSNK" - 24 -> "TAPP" - 25 -> "BLIH" - 26 -> "TAPTIP" - 27 -> "CLICK" - 28 -> "FWUMP" - 29 -> "RINGGG" - 30 -> "BRAP" - 31 -> "CRUMPLE" - 32 -> "TRINKL" - 33 -> "TAK" - 34 -> "SMACK" - 35 -> "DRR" - 36 -> "CRASH" - 37 -> "SWSH" - 38 -> "CRAKLE" - 39 -> "CRTINK" - 40 -> "FHP" - 41 -> "CHPCHPCHP" - 42 -> "BRPBRPBRP" - 43 -> "CHNKCHNKCHUNK" - 44 -> "WRRR" - 45 -> "BRDBRDBRD" - 46 -> "PHF" - 47 -> "BWAAH" - 48 -> "BEP" - 49 -> "HSSS" - 50 -> "SHUHP" - 51 -> "THUD" - 52 -> "WHSSH" - 53 -> "BRAHCHCH" - 54 -> "TIP" - 55 -> "BANGG" - 56 -> "ZHM" - 57 -> "TAP" - 58 -> "BANG" - 59 -> "CHUGUGUG" - 60 -> "CRISH" + 0 -> "SCREE" + 1 -> "HNH" + 2 -> "CRNKL" + 3 -> "ZMM" + 4 -> "WE-OH" + 5 -> "UGGAUGGA" + 6 -> "KRTNKL" + 7 -> "DWAAH" + 8 -> "BWAH" + 9 -> "TIPTOP" + 10 -> "TINKLE" + 11 -> "TATATA" + 12 -> "CRSK" + 13 -> "CRNK" + 14 -> "TAKH" + 15 -> "CRUNK" + 16 -> "SCREE" + 17 -> "TNKTNKTNK" + 18 -> "TIPTAP" + 19 -> "WRR" + 20 -> "HSS" + 21 -> "BOOM" + 22 -> "CLNK" + 23 -> "BRAP" + 24 -> "CRSNK" + 25 -> "TAPP" + 26 -> "BLIH" + 27 -> "TAPTIP" + 28 -> "CLICK" + 29 -> "FWUMP" + 30 -> "RINGGG" + 31 -> "BRAP" + 32 -> "CRUMPLE" + 33 -> "TRINKL" + 34 -> "TAK" + 35 -> "SMACK" + 36 -> "DRR" + 37 -> "CRASH" + 38 -> "SWSH" + 39 -> "CRAKLE" + 40 -> "CRTINK" + 41 -> "FHP" + 42 -> "CHPCHPCHP" + 43 -> "BRPBRPBRP" + 44 -> "CHNKCHNKCHUNK" + 45 -> "WRRR" + 46 -> "BRDBRDBRD" + 47 -> "PHF" + 48 -> "BWAAH" + 49 -> "BEP" + 50 -> "HSSS" + 51 -> "SHUHP" + 52 -> "THUD" + 53 -> "WHSSH" + 54 -> "BRAHCHCH" + 55 -> "TIP" + 56 -> "BANGG" + 57 -> "ZHM" + 58 -> "TAP" + 59 -> "BANG" + 60 -> "CHUGUGUG" + 61 -> "CRISH" _ -> error "unitialised sound" soundPathList :: [String] soundPathList = - [ "grunt.HNH.5000.wav" + [ "tone440sawtoothquiet.SCREE.5000.wav" + , "grunt.HNH.5000.wav" , "glassShat2.CRNKL.8000.wav" , "buzz.ZMM.8000.wav" , "seagullWhistle.WE-OH.5000.wav" @@ -193,125 +196,127 @@ soundPathList = , "seagullChatter.CHUGUGUG.10000.wav" , "impact4.CRISH.8000.wav" ] +tone440sawtoothquietS :: SoundID +tone440sawtoothquietS = SoundID 0 gruntS :: SoundID -gruntS = SoundID 0 +gruntS = SoundID 1 glassShat2S :: SoundID -glassShat2S = SoundID 1 +glassShat2S = SoundID 2 buzzS :: SoundID -buzzS = SoundID 2 +buzzS = SoundID 3 seagullWhistleS :: SoundID -seagullWhistleS = SoundID 3 +seagullWhistleS = SoundID 4 seagullBarkS :: SoundID -seagullBarkS = SoundID 4 +seagullBarkS = SoundID 5 smallGlass2S :: SoundID -smallGlass2S = SoundID 5 +smallGlass2S = SoundID 6 skwareFadeTwoSecS :: SoundID -skwareFadeTwoSecS = SoundID 6 +skwareFadeTwoSecS = SoundID 7 sineRaisePitchOneSecS :: SoundID -sineRaisePitchOneSecS = SoundID 7 +sineRaisePitchOneSecS = SoundID 8 twoStepSlowS :: SoundID -twoStepSlowS = SoundID 8 +twoStepSlowS = SoundID 9 smallGlass4S :: SoundID -smallGlass4S = SoundID 9 +smallGlass4S = SoundID 10 autoBS :: SoundID -autoBS = SoundID 10 +autoBS = SoundID 11 glassShat4S :: SoundID -glassShat4S = SoundID 11 +glassShat4S = SoundID 12 glassShat3S :: SoundID -glassShat3S = SoundID 12 +glassShat3S = SoundID 13 tap2S :: SoundID -tap2S = SoundID 13 +tap2S = SoundID 14 impact2S :: SoundID -impact2S = SoundID 14 +impact2S = SoundID 15 tone440sawtoothS :: SoundID -tone440sawtoothS = SoundID 15 +tone440sawtoothS = SoundID 16 reloadS :: SoundID -reloadS = SoundID 16 +reloadS = SoundID 17 twoStepS :: SoundID -twoStepS = SoundID 17 +twoStepS = SoundID 18 fireS :: SoundID -fireS = SoundID 18 +fireS = SoundID 19 foamSprayFadeOutS :: SoundID -foamSprayFadeOutS = SoundID 19 +foamSprayFadeOutS = SoundID 20 explosionS :: SoundID -explosionS = SoundID 20 +explosionS = SoundID 21 tapQuietS :: SoundID -tapQuietS = SoundID 21 +tapQuietS = SoundID 22 autoGunS :: SoundID -autoGunS = SoundID 22 +autoGunS = SoundID 23 glassShat1S :: SoundID -glassShat1S = SoundID 23 +glassShat1S = SoundID 24 foot3S :: SoundID -foot3S = SoundID 24 +foot3S = SoundID 25 healS :: SoundID -healS = SoundID 25 +healS = SoundID 26 twoStep1S :: SoundID -twoStep1S = SoundID 26 +twoStep1S = SoundID 27 click1S :: SoundID -click1S = SoundID 27 +click1S = SoundID 28 tap4S :: SoundID -tap4S = SoundID 28 +tap4S = SoundID 29 tinitusS :: SoundID -tinitusS = SoundID 29 +tinitusS = SoundID 30 tap3S :: SoundID -tap3S = SoundID 30 +tap3S = SoundID 31 impact3S :: SoundID -impact3S = SoundID 31 +impact3S = SoundID 32 smallGlass1S :: SoundID -smallGlass1S = SoundID 32 +smallGlass1S = SoundID 33 tap1S :: SoundID -tap1S = SoundID 33 +tap1S = SoundID 34 hit1S :: SoundID -hit1S = SoundID 34 +hit1S = SoundID 35 slideDoorS :: SoundID -slideDoorS = SoundID 35 +slideDoorS = SoundID 36 impact1S :: SoundID -impact1S = SoundID 36 +impact1S = SoundID 37 knifeS :: SoundID -knifeS = SoundID 37 +knifeS = SoundID 38 elecCrackleS :: SoundID -elecCrackleS = SoundID 38 +elecCrackleS = SoundID 39 smallGlass3S :: SoundID -smallGlass3S = SoundID 39 +smallGlass3S = SoundID 40 whiteNoiseFadeInS :: SoundID -whiteNoiseFadeInS = SoundID 40 +whiteNoiseFadeInS = SoundID 41 reload1S :: SoundID -reload1S = SoundID 41 +reload1S = SoundID 42 miniS :: SoundID -miniS = SoundID 42 +miniS = SoundID 43 crankSlowS :: SoundID -crankSlowS = SoundID 43 +crankSlowS = SoundID 44 fireLoudS :: SoundID -fireLoudS = SoundID 44 +fireLoudS = SoundID 45 mini1S :: SoundID -mini1S = SoundID 45 +mini1S = SoundID 46 whiteNoiseFadeOutS :: SoundID -whiteNoiseFadeOutS = SoundID 46 +whiteNoiseFadeOutS = SoundID 47 sineRaisePitchTwoSecS :: SoundID -sineRaisePitchTwoSecS = SoundID 47 +sineRaisePitchTwoSecS = SoundID 48 tone440S :: SoundID -tone440S = SoundID 48 +tone440S = SoundID 49 foamSprayLoopS :: SoundID -foamSprayLoopS = SoundID 49 +foamSprayLoopS = SoundID 50 pickUpS :: SoundID -pickUpS = SoundID 50 +pickUpS = SoundID 51 hitS :: SoundID -hitS = SoundID 51 +hitS = SoundID 52 missileLaunchS :: SoundID -missileLaunchS = SoundID 52 +missileLaunchS = SoundID 53 shotgunS :: SoundID -shotgunS = SoundID 53 +shotgunS = SoundID 54 foot1S :: SoundID -foot1S = SoundID 54 +foot1S = SoundID 55 bangEchoS :: SoundID -bangEchoS = SoundID 55 +bangEchoS = SoundID 56 teleS :: SoundID -teleS = SoundID 56 +teleS = SoundID 57 foot2S :: SoundID -foot2S = SoundID 57 +foot2S = SoundID 58 bangS :: SoundID -bangS = SoundID 58 +bangS = SoundID 59 seagullChatterS :: SoundID -seagullChatterS = SoundID 59 +seagullChatterS = SoundID 60 impact4S :: SoundID -impact4S = SoundID 60 +impact4S = SoundID 61