From b34353deae1120824c3889d0d80bf18c3798461c Mon Sep 17 00:00:00 2001 From: MADxingjin <25790044+MADxingjin@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:16:04 +0800 Subject: [PATCH] separated single file.converted to sdk style, initial CE compat on going. --- 1.5/Assemblies/Implants.dll | Bin 91136 -> 92160 bytes 1.5/Assemblies/Implants.pdb | Bin 202240 -> 33352 bytes 1.5/Assemblies/Implants.xml | 46 +- .../Implants/Anomaly/AnomalyGeneral.cs | 308 +++++ .../Implants/Biotech/Gene_Deathrest.cs | 129 +++ 1.5/Assemblies/Implants/Biotech/Mechanitor.cs | 557 +++++++++ 1.5/Assemblies/Implants/CaptiveControl.cs | 88 ++ 1.5/Assemblies/Implants/Implants.csproj | 72 +- 1.5/Assemblies/Implants/LTS_Implants.cs | 1014 +---------------- 1.5/Assemblies/Implants/PatchBootStrap.cs | 51 + .../Implants/Properties/AssemblyInfo.cs | 23 - 1.5/Assemblies/Implants/packages.config | 4 - 12 files changed, 1219 insertions(+), 1073 deletions(-) create mode 100644 1.5/Assemblies/Implants/Anomaly/AnomalyGeneral.cs create mode 100644 1.5/Assemblies/Implants/Biotech/Gene_Deathrest.cs create mode 100644 1.5/Assemblies/Implants/Biotech/Mechanitor.cs create mode 100644 1.5/Assemblies/Implants/CaptiveControl.cs create mode 100644 1.5/Assemblies/Implants/PatchBootStrap.cs delete mode 100644 1.5/Assemblies/Implants/packages.config diff --git a/1.5/Assemblies/Implants.dll b/1.5/Assemblies/Implants.dll index c00f85a24f1729d8e2dcc58976927fc07556b34b..0e34e1cf1f93323b72402bf45937f86bcc3977c3 100644 GIT binary patch literal 92160 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 n zDJ!P?8QzUBBeYSH`6|gw9rt|}j$N#_*1e~*zvXX4r@V39zRm-|rjXNl+^S$rcicJ= z$#(8-nZOzCyI^Y-JLCS1p>QDC^3C=Sb{=Tiu=EeDy)7Sw#j>+SZTyYSO3Rn8`e^6z zmRnly>YQ%rzv;I-?`ru$^B;7cXo)R7*?F?%-5b8td7|Ovji)*vYWd5)$58U0F1rh5 z)?f8h=ldO_mFQ{}+hA^BQWahx$GjJ}Nlpn&r|tXRPNoteNvskwu>r zZ0v1*{<`^CE8TL#-Z}Fc|7zLDoEUB_eH`Ipgkg9l7>`SQpDF;7RtM(<@a>%UBc4&y z2=nSgfP7Q^<{Y2;C-pIucYJ(nLc#+QmNlf|V^8Yd7NBmz@uPnIN{~pBe^Rxc@ z{7?J*cC)G;`pH`bLO(DJ$;nV8j zOOGJ_O@vRYja~O4K8WyX_4%$RCH|zuUqbwmu9pzMd~rkYi)!8CB|$=#1fNz9Ebc-4 zNrX?U6>m!+9!H3M(zhL98H7)(`3t2%lE*%X$Rf zgZR*8DS@XDcP=}E`1=q(t^V$^`$7#?!_uiRv5{(JctpbcBz#iBmn3Y6Fn5WBJrbrQ zJQ8_QwJ$vqd0HJ^dY{DaL;SawJ}J2`NvPWR?!G9)$D%3q?EDuH&Rg)pTmBS~8{bN7 z?|UobpONqd3A^SJvQNS(9MefJcueAIp1dXDl!T8-sOAe?!m0Uxhj$;7xLQE?)PjFt zxR8DL%tAt5kg#hJ<2SC5cO`sG!WSe|-SV!4 zH%j;$I1})KdRc9=c3QVu`>e}-AM@D_xrS#NmNZ_|__fAAZ+y9NT~lAvSDHSBgXm5E zh5p6ESTqc=r&MDL8=6FnV$A^N`9M`9n3-4pv}tf3>; zv9-hQxV__rj-Pi#I+u5@>ij>Q!8t?tG&wagROepVoVgz#H8eqQ2VLHOHmeHh_K z!%raGdkw?VWegWD|E~z2xc1Kx>Q+;@H0 zWq9J+0K)b02*NMMJ7>iY#^+YyKfm!36ZZkn4cJkLVQzfDu^-_jm@yx4hfl@g?0GA~ z)tD6@@Q)91;a*4w!fSB@)u(o;w<5d+@A+_dZUMr5m=_;ztKoCvxEZz>;T@3kKAcEh zitvM|)u*N~C)mTltoYOn=EbLuD10#rw=7p74w`=UM#-7g;wWTy6~@+-waZ+-mJaxEGo z5x&>jgK(d<7h%?V55l~48|db!Zvny&`4%DksP9sQcjBBvR(;I31mVYhOA&t3N9wu< zC3EU`Q8K4KjgmR_A5b!@KQ=di2g8B+d7SvZ!vY;OJ@z(02C|OXCp=3cl z;aiXJ&rotw{dbg{RL`R1q{e$lx8n0+N&~!)Br<%?*ZS()HKzHcs(EXvFmdTdpaBujk)*D(^wykd) zZhKE#rmfueOxynU@3+6w{>A7G9l4Gi)H2hYOp|)ql>M zcT3U&1>L!%`~jWuAF*G@ovH@>=l*-3pRxLP|L0|HZtZy;cHU-}`;YB}-HzJ!gPt;= zoeBJ9@t4D29(xoAKp6$xq%Gn^aY^k4R(1nVdvKSq3~BKPpg^DXoI2wBsrsSsH8rQ< zu=+ydZ&~o&TmPf+g!Mz;r||bR>ra|rwPI@q9j08O-iT9?Vu@!-ZtFn0GREp$fV_ zl}PkD#e61N>B%IEMX7x@a21=}Wl!Wv_7>-ki5%ZvO&I&LhLM5fetVal$tBY_n$V?_T(lelG*gGWZEgSx>7ZJTN)illS3u_ z+?Gxj#*hYrCh{v+xx+@}0>ftZHHics8Xp(xuzAzlVSog+#p~1Z^7TbNHkY%heXG>= zawe0+U=i)_%a$kXf=OXeX$LrF&MrHd9?WJcJ-JNAP7&>%;-y@HsclZNglERd?q@$I z5(&Xlrh>d|Y0YZ2F`diW*RR9$s*U5Qdvw$!IF*@U;K45SXGe1eiqv-d5Flghh@CAN zIPu~g-D-o&)p|s$Ra|#)wYmje%@xp^r!z>E#__Q%R<;IlOsa{_t{1s=AmDC|X=;rc z&S6ZbpE2Fc?Bbx)wHKWy)P+pW!&Kr)Ek zmDo~9=Et3s+G3a7=uo8y{C3v}z1Y3Q&O#PSsb0I7QW!A$Wv2&6M~ikzK&-5%TquA_ z2a?(3n4KOTFMwzI(`YM`NH|%i1Zi3YvV1S{F);{|nN05B=3F6Vr!`-zVy+D7Au>;G zx9xP%#07dTo?nxW-^ssHc*P%)PR$vpkozGB@cO0`<+at zXmZ$}p)zJY%W{cCB9%;mMbX6)#!&<#0=x_38p<;^ln3_XrIHj zC5#e4GjO(ZGe%>I^%r+Q~gvpey*Isp#L_j=~*;Vg?zD^AsEwz1`F|QWk-^e@4hDUoAcJtt5b%w_l#pu285B9lG&6!oEth&MlES@ zGH?UBa+qLM?EcVru22G5<_O$TtfWA=o9wYNDjFOq+Qp(NyCYd*mYk1#Drkh719K)@5p5@XOD zROpk47Kx%^3f#f03-c1O3%dXb>k16QFgLk_s80}!_6oTQQa!m;E|&$SOj_g`itf%* zZ;j;&P|^CG{_G?awuu)9Kt;)H4r$RFOe}fvMHI-#X-C>-mSI)3?%as-!?py zpwuY>J;3j)EIGii|17Q4U#M2QT1z%GsF(ojfRa1T4F{l($j4#+M*$-#-u zIX5=I*eHX|PNp=TfPIJf1cNPhX#$m9PUe&Abv(6 zbcj;$A0qKdur5g%8X>hGtO1xIT&+%eN%pu0Bo7Kn%?KCJL9j~3Y$==strZ5KAvf7Q z$vkTx9KFTKWh9prp4eqWdP0_}!F*3HjV2+(`m$-LNm~geO7A4O$I06o4l{scnXyY6 zkhVvY6uF|CB{B?R>rGA&wmC`D1}taN9!cm5+ltAeE(Zk-Kt%A( zl9P9%nwch{X7UpdUdaslgc8H!x$@XJ)ISp}1I@P0Mlq05iscM=7pONk(VxW=5SJ>2 z>@;XIjOvn(!dh}8MT}R+A?~Q>dq4oFpdcaJOG0J!fYeK95Sf^I>TwgRu@fgJ0isW4 zAR3`7`h-e6{3e1%FJNeJoL^K5K%J6{Rs0}BwqMl(x9#^jJ;Mm<@Z?FmBSC3}wpt}K^^NvbFet)5IvT$9j5zTVo=ioULZ$7V8RJ%u;~ z=tWSOyrTt;U`FF>Hk5icpSP0*SK~?nD%rtoKg6c6ly@bd;>FssK=tGOd`^_NGM&-w z6iLrgm+su`r3r?PiJ!CqPi8B%HI^W}zqsAiDzMgo^Zu#?^$1f~GwC#u2+9C=3`3Z1 z1qlMO#V#?mxsaPM5Lh8tUkvBQ#*jUP8u{Ro7S9Qh9-8gIT|l4*!}Xd~a_c8(Rsk3o zw%QHzuF{tsgG`6zSfB`jNiIVZcGv>_Eh#E;1=%7`V`^@fYoOO5?^3SD>pD>~SGH%08IgMXr7(ZApPNA>b0mUNUwz6#?)e1w8$h z?qPkV3i6UvNqwYc*-&|emYQ8ih$&D4rn4nTADXYkyc%~SS_ugZv$C1y2b&rk6%dha zqA7AcIwJ60_82S*iH<_Ke#F%%N+ZBi@@V?9W1~$pWMd0Q*bn z$2b~yqeaLrm@E}YlifvI=^k!MB5I6&u3bi$76zu;++>#y+R$U=44|e>59xPnE-=zj z>_S{_O-_KtVRh0>ggBIkXmWHWi#905;3LT})|1Tk=AaN5XSWlu)YD`kQ4=OcS=65$ za78onMhmu0uY(shfccacH(tLgktj-(Zyp@SN>Ob~j@TKPA#hNDNZDhm7+7cp`#{-& zWkY^|{aLC55fL6y!d0jsrv~$|jO6wwxD<0zTa%fb04Dej=Nl|nAPE#OxHJ|G1!ts; ztSx27lj^lc%41`cAGH#A`4;rB4%QDIPD1kuss^zB0B6+R*q*CmxCR^m9bEt%hsBHu zs~{^4VO`i?dqcY-HW$FG2SN3<4Bbn+uoZ&H<^sr!1#4tGTLcByKziijp@Kk69+FtG zmT!a@iy=!dcx$<`=uV0M!|hCNLYDR->uM`~VcT1hnX;xu@V`!g{E4D!LPyvdxFrLN zcGAWY0d6illVk9(=qOl*O9?_rLT16GMT+V-vPH7uS$GRF6_W*(02>)^(fG=kx3OX= zXQ1zB$a|!{YoI9jAWQF=PBt#ApDG*;-0dxOs`|7WXaMN1L#w->(5$HiDNi>l&in6?Q?V zw%J$;nK%S@vS4SnaZ##swpV73{G=e)G{k5r zo#-vQ;Qs7Z7>QV70)50b^5qGePGeJ6284QWs`f(~5$0kR^GYj+pek0C!6_VAm1Jhv zDG7!t>xfvs0p-J(7A9IzFpWuu;7?{;6HD1o_uchb*tffYirCMTK%m-GX=h?OA;i@3eoePtcRR!U?Yc7>YZ^dwy zyj(U1Yj?Z~m__eII<;-FCkW!3Slb< z4XSbTF$d~6=kAvn>qf<+I4J8u9VZU5!$?VK_@5zFlwCuy}~Jm z7AiVjqQutC8YhWfjzSK={6SXzDzyqWCZ18s-L%>u*ZBh6@bc7_mpI6VGPa#(9@rnA zUhQqEx?QAot@^gY?^fqaH-2~_*lk$BgCS9kUVII~kca)fW4uz-PFyURVe7z}M-h*q z-aV8mIC+5*6;&54i*3t|&0f!FSC<36bnQ(-F0ih-NI^&r`n6?CrTV6a5o)hhOIC~3 z^TWkT8g3|d8*78^!?7%ULY3XxFOoQK;iLUsB2yAt6hShjxIEF!Ve-Z2RYgz&Trlk9 z^>mpMoQYn05^fy4%LK{g!f&%OnUcw5rmlVQB@)4IA7I;~D(?Rc=S)eX*UcJ=&bI-0 zmmCW9f~PCBg?ysFs1tS?+-8bUI*ZGQ-pYhFy)KY@A%{{TK4xzQF;(lLnywL#5ln-b zn#+GvE(=F;(bKysqJT*4^XHn4%Oz8Y0*YAHn~h#zZSGwpowrNsX=uoS`w4zN*lY#X z$9e^(Ws)fg9)lT~hgUoicP0k2S|Cz}r)(;+EOu7mm*K9W`v$~&IhP+#j@d40RjC8U zkf}_3sbFX9_G0xV`@3)h)ou53`wR=dYWwITTtetgGL0pjbpwuB3W0Sk~Buq5U?Y#BV)ByLE>TLM4NQGInuX1XF)e z$8|Q=zZISCDU?xyDgh3{2`ty8X^)ak=uHO9_$F>D7WNOq>}7GH7t8AOCLsKvlQxjy z9L?n_s8|L+6e_Uz;B2O|fDb4GN_**w$5zNA%c#2Q?p{2b?k{TBkT^iF^8=OOuHPX8 zz)aE;Z31ETQ~T907tSeJQ8L+IgxbL75wHdpCVE8*N<>>xRTw=7k}wiX;-YKz@U^~+ z9gt8X*vj7T#hO?VusQ{1+=g43<{BC6J*;5i+^Kuz7VJx4cL1iB{zw69&=45d^2zaW6rrL?b&s3 zr^{zr+5MaOYMvv7HI^NMGL-Y{D!Kk zpwlQMEn+iDBG4!xM(#~X5?+052uP9>MWM6s}SUYq4}-Y#gV>|UKG4t6J~O;ug1>OL*Jjp2(g@^+oM;^ zL@s~8TP1m7O@^~U^ewBQ@`SP0=)l9&@e~vU%N{3_hFcr4o{Wv>CNKn_r~<}ma#EsM z^D4HH@|b8l&678S+`}0WcTz1|?`F=<=G1`JCURqTR_U_`ZmL9StMv`{h_ZT?u*b}; zMx5|5JGOlg4cV%pN)CWl#b*W_{J}mh;me4iAYNZDtZ;YP`weffm-7IWkcNS`7yFI1> zW{otGaSR|=i}qsoJSC=syQo%B!WvqIpc}Iw+6dr|qHY4y>g3BNF^e>Nv2;p9nQTL#1-I7dwdZR@#k>fsJt{NJGhsPOe<60_;Pu;;Je7bZG~oRlY_G z&y8=zdcsW)!8c;EfI~R*OR})QTkgWg9yRB>s8VWj4`bn;M6pyT>zW-;9903MvNv9% zG3f{Nrvc}%Eu5!~2Is{gssMH`Z5Q<##&jEYQxQ>MlaDyOUYp7VJtB%k&YL`CHvxWI z5Us5thLa>$@A^uVtOB&!k|1J?xtbjlNPn?9zxog({Uz>!MlCI}s6fhU=M@*toK_AP zWLijSVLq7MzN1GpjE8S#5y?g0KqvL96G`kQ9?W8|UZ*!+za{}|4+F4yni(4XWI7bnMzCf=tu@xo_Jn@M2r|q0}?D4Q2SMWGBAW1V$W6jdfi}gCM-hin(o7X`?tsr>c#rvnzZO0rHf*EQ zFsGTCg~i&kQx-_#iPDAY<@1Hh!9t~#gzxKs9(7F5m5z(YNk?S~W1ujnbWATr+_G|{ zLMO=V2~=*D!rG0&slXX9?Z(ic_*gX!eAHzD>-7M=vZ^a%EXz7rZJ>2v`ZkJn5ItG5 zVOkB=L+ku6y5n5i*VSgIxsT`Z^4xKwuf`oWJjQhp?ani0QsUe5zF=m~eT77$*Vt0u zEc4j|`xGX}uh}#0-OpnqZSt~a+4%Q zR4OU!Yh8VH@1!0| zhH$q~^dUSueLk#OBF)8A-DxSZKHBw+oiY#xBlZ@sazU2tp@F?&0~O3^7DQnE^1wV| z?DF~I$ar&ROEgoEU35#x_^JsYLJJ-&`EpLmHVH}|69sGAphS}z!V4}{8<1x#5G(1; z4wuJ@;%+~gh@y*Ustd9mTaXyJkX#R73Wu@brsTR$C}eO{pT^aPhB<3-_@J;8D!JzL z*x+b<4E}bgdaS^;@8$fQ>b@a1tc0ksbTVp4Vp>5kN-LG(l*?xH98O>Dz?Mx)4TMRo zBW~Aqs*eZByt^8zFN+lpY+x9);sXS>dO-B1_b{rk^k5_83&=-A-D?z#8*PiqjeT7` zPTuVngZkYl$3(iRXRgO_^O8Am^)Id<-rr5TIB$QA8a&;f)#d(eR8O$KF@DZ> zE#)EG8nByQY1k25@xgP&gPgr~3XVyvSailteNNB-x>FjSEQ~-c8qA_#Iw$Z6um;v_ ze04Lt8oRg*z=;jG_|+E3B5#_6&S^&$qcw?AJMLthHu``>jw>UU*0zr^*DC$JMOj*c zSDaCMOR~sgSiEOYoKvMGglQm2})IjCq((H0?lc|r&79!M^{ zZZ_G5(Z^$>|zxmMyP zC#a~PxKt`BMqT(hu&LHCfh2S^U|B#jB>fn3N~clWZ1 zLQhdq-PNO{#25~8^PmY2|7p@76R@8Q;qsL@4mcza5kENhJL?{hyQ-1HJViQHajgsm z>8{qX>au4P;{|fyH-oQJce-dce~a#=i=saJ4gCZc^X5!)jDT#qFH5~|P7FXeiJfca zA5xP$j~chQ^)O^ptl4SEeqIpZgcWh)Wo;r+8h3Ol9<0+YG}`t>tj-Sg$l16!Y+8Z9 z^Hg=olc4pUQvFt~a`l5=E9e(F!Ej!Qs~Y}0aoHE)U4UU!OH%W>*TodveBw@#X^{zn zy8+yQwRbKCiKtt11jRJdl1~se(B-!a8MB1+>9_;WhW%N0s9} zx=2>BbO)oq+K~emlM@1@XVx`ZspPG}-?dAo=ic443|$dOD=?nLdSJ?$M^&C1r- zuVkOqv)(kbBQjC9F-Rj7e9BW?x)*Y(6?~l<-(%D8*XfB_>6&vH4DR+})>XWoLM30y z6?w2=2s|ML;rxN4D+k+Sl$?%6-2<4yGIx~NLm1@9g{cm6xMUWA=O533 zC^kNJjn0dhdb2bZP^dLK>9z1h?aQy%UX zL2|veOX!14!#pce%dbO5eUS?o#;!#Pecw&NRnh{I5>;<^@T#o1#Z6K#RAfU06J>zL zSTref#l)m?a${2r18Uf9_9*%ay*oH6t9al+pEIcLMsF3qHYmp>DL5`sO~&aDllb|s?8ddjQq^Xwy5qb1CIC*AGkMG? zJek#f9w@y`i4!Nrz#vbP^1>1{I8NNxlG@e5c}HF%QP2^JTG*%;-Cl>S2wcOylxxml z6DOl%U>4pe(58iv5-#&_n*av43mt=i?#G3CEW}FYh&kkv)?C08FA~W_)VVCY8CA9J z0`-nvU&f}i!MbeH!7T)dyC?kP>Dys535dy~NQcKw&XT3w+1tKK$CvtRPAmxX>wv0pVdLEgV^A_-gbumy2H9a=w`$AuYwzC(ni z-t#awez5U~655b~+|kKhHqUf&Bs?_QcVc zKtP!^Gx*p7BL|)U-o71!|0-=C!Zr+zJssy#j}xv_&|u^W+$N~z)}45hrKWTidY@a0 z+ESxo>Kv*r%S}pF5H$-|uTEVuFpE|A6UE@vp7g}*Ba!Bvy1{!-JkHMlRc9VedCrCR zgrWh{mJti!mmNBEo2+uwuW{_~{C6-bqzX8+^-)1nLN=hicl%s4vAla|)rE2OTjeI& z*q&i9&rOppg-3DT&4qb4gJNOn86@F)f-qgFb`Q>CEq~lsWTbAw z_2-zkxX8nzPP}cKk_8H!UaV{@Vs7cva`@~9YzeIkSP9kNqp zdPLlPSz3AKXfHa&Qw8Rz4mL7IbEz_J-9jsr08Yvtj~Go^rpH7`VUKkZ=BUUj7q+9| z;9P`VsDf7-w86W8{oPze<@M(v`t<&q7ESo{N&#nOT1s=)&+3+Xf~N# z&@P-EwKJSm*$#5SaDcl}x;*hg8og?$LhCGWw`k2h;6l*rk{cIe!A(Hv)ZGstUi9%6 z5(pQCL-4v`y`&kan!t*(mIIeF9KhAQSu<}Y5u`c@8vy6%+(oyk_k23|Rd0yxR&5S+ z0p>zEFpyCB9@gfiEX+!ZQm9T$V_|MT75J?nF9?uiiN* zhbHjEp)92FX$^(Tbtr|;NubtlrGhK*&Bi78HlXSokoVz;M_F5KN4=X7PobnEZEQwZ zz}Fjb)m-7TO?am8h2I|eq9FWG0$1;J;p2E~60jlE!8{yjmHyz;J-)xkcoyI0Q#b$1 z%J-lTIlP@l2>YqpL-tIqi=$tTX$QK;^l%7x%AqY>oW&DIZ_w)`%5#)yr8fL}Z|yR* z={Ge-)#83&JC3@D2?ya;)SN*p1Nh^p)$(0{OrX^ydRxN$6#!++S^O0Mb+Nlxsoh=Z zPeJ-vL`iraBpgS{F1*8>GTuw$>xEr1)2xfN>)v$9vkQlFV%cn*KTfmV4yf=!!l+^ByYeag=T8kLATG5Mg z?0Z_q#9qTQ0?36>uh!L1(#6Vc0{V%$G@f~-F8}r3Qt#Y>K2@qDvID*1m^Py~B)}1* zQy|Z67#+z|ts#~PaI$ZFI1dUc>YU^0UJWqoE~=qNeG&D#|%lh zlUAGhA`rmxnn1`)tepeoJMcrH!<=|c!Xs#bQ%m%9p(U40%Mv50@$D240oNN+n#@Rm zgdfDa6+FpJBv(z!ZZ45R~8k8b;Byv13< z<~ec;ke0SOg!XDZ*aZmZlH<$(g&`rg|erb=2dw3nIYkxm+koGqk2Mm&r*pq&nA#(z(P4M??`q@rF7Y@VDOW zHFXBQKZZZ*!dl6G;DhD~HHB;N5g%&R7L^4nX4o^*6-5Hy;9BMU@}vw3eD(nIw&r4Q$B|3A(c=8q zdxt%sB4O`mwF9A`*A+QnhNaN92X+uJ;!I7QCMOaZToiCR$=xZWhCm*Kuq)k2X*MA- zbpZkF>K>_>7Hv1A8d+)#&1izCKx%pA#I=}StvxikkaQmsFI1nqJ>a(d92sM$!lNqNj~vM zYNwgY`e}jI3FUX5|E8uD>QjoOOnvzV{6_SW^KA<97>4rPg!V-(Qr6|G9OfHO=9Ko0^ww+z~4{h}6b(DicFfSaeNO`8Z5 z?(`Yx`K1LXo@mnKi0Uqb${$UR%&LLq`uOl4@3~5mK67`jU#c zxTHx^-($62_cV*QS%MPVH8Gf?w5Fqq7@&f$^-^v4Wp8q%TA`A^lc34EcNf!4U|TeW zsBX0~f*ws6U@xP|MKl6Ik>1{`s)k*0YeOvUr3pB z$dD51O~5)?d36!v;?JRUS6!)k#yGFI{(`W!j@yNPvA5{!3Sxxy6Yqy02d+j9!>EaU z-;XhGkuk6il+ORJ-}>Jww4wL-9g`=&?SE@THFPPfvCFaoO$efM7>zLSH6w^kuSdQw zFef(kZ6x{{yYTZufGh-LI!*{2E|S@ynz~eMdcfc1<6DtXSA#sG)Azb>FLhsHg!N6G zGLWfL&He^oY=y5$so2aaG!STLjtw-ewD4<3O(B&0G15+Bb8KckgX_>rY(;Fqhmv7- zHXQUf;q|aDw$s-f_BBU*&Az5CU&I$~_WNQ^Yy}1vb0Up?UnGK>l8wrWM4H>C)Z4u*6K*(bYs0n?Y7$hhtNBvBBd&X>8^$L>7Tu^sw*l=xXG| z#SXiG*vtt|@XYV&4ut3WTYRJh{Htrlho8P;GlzvlmVvw^6`NVs+103t@o;qJWOU}i z*vvz*!>#QW`b!$U1SHgm77hmtI#&1rUu=;keAdFb9VmGTX?Pk%B}bQEfiX-yMZ8X( zChDdhY*&r33Sa;r6`gsUs9`n0>#|5!6DSP-%`6MVW}XTtQh#*jG-{b%-{`kubBU8@ zKoZ39)LD7!+d*_8I&~8NlfFQ4e!MsH{aA&Ce~4dXvm#8+{4h52vJXGf7Mpo3jJ7c} zWkyrcy+H=ZuHD~QkF^Num!Y8ryvLSb25o|%K~^)1(P(VC90{q$Fh(|A_HoiXz~YU{ z3WR}i^yzfC3A`Ec1yyq-ASBCL9_rvc;UDk;nwxqY1;KHa)gA_aEfcgoF679p$4SJG zH$xm2ADe%bE2vl zcqC;3rIA4N$U2ud&!EkjXt=8(HZxC`2+#L7g5k(hnn@rc3`0HVvf6V~_jg?lp>qZl z89j2Hp1QEi8G~>*=7iA|FakK&eZ+yKxO9-uTK!&DL|c(a>_}hiNIxsmc$qrpK4V7) zVn=rB)RBQOWD)8Ex&fX#<95=0;{8AXtc^}YXBL6pG0hH8K=k7UUH#Ld(h%7i0HA)?nwRnDc#A3JhD%V#8ohnB@=UN)V4D%jPCk(NQwB%F=y&>m0{ zrdN0Spogs30MvyQ>s{av>bD&96*3rItCnM16|Dh58;+q72il3n!Vtm%ssnQTbh)M7 zY809UeSwAp&7@Z5MUNc!qd#DcFcQwLauO1%oj{*k)_T~_qS2~71%ugnUo29Cg#^HL@WljAvZ z62a7q41P#icH|)fzZ?Kd$smO-Uz8B}7O)e5EaK$8>_*PD&_)2{9DwtoC#N98FlWRH z|B+;)Q*Thoi(EYNc+A1jso_8|P{FYZ`bnvYIR1z1@4*^`+w zhNWiCpi91Xsdef#b`1>q2Bfl7KlMfnI_yp|hBa-4{M9ronzl$9=>Uxup!jiWI%)>| zzgWTGaM6C`ELwk=6DTYu7=4_tX8isp8Do2$UImC!>oALyLgaC&-e;s(g>4@>C+MVx zIP%7Vu2w+a0Og>4DBh={M=kt>oiBQ{$%jEfxkjh%W^M0B@uNWoQJ^V|M@09aI!pxu zq(%(*XfjPN@Lb(G2p4QvFW8~Uf`>$El-^V6HWpkOE= zw6j84sKSv7Ki%T7S)j~7A`5Ag1qAt^E+7(91AJJ~qt`X72J!&yR!#O4OVOk8=w7e| zM!F1f@?^jl1Tly*fJud+28=yXnX6!k5G#;joa&jyGV7Q^e=xwFBe)+!xF4i#1kqUz ze*ir|)>FjHZLM9pa#{t`r=jM-AySwceEPOPAa->3GJgkZF>L`^x3OkZy(^GG1f(WZ zzn4K0ZTRq@B~%G;f^TDO5G0Ho3u)|vZcol{XB9*)I^xCgC6+%Vq|MnS`8h>)Eq5iB4HjJ ztuO>ZL4YDVf(*cnpgam|6=XFbGye59;h7rEkru%LFkwJo&o(N{S_qSiR5tZ8g?wZY zZG0;t`7eO`fsgeI{Y@IT(BA7F9Y7$lp^v>K187q841kzHF zW*F;^E+U(DBMc|VaY#lRgC`#f;(w3Ti!pTcbF3Y>5pMr;C>o5S4`yNPC?t9G=$EhZ zUlJS8+6AisNFt+ZI6JP;V0_j;R&a{JBYs8c9`*sjSPW5{xvw$%w5Uzu)FDlBqGLy& zVa^%Re1XgStuFT6X9Tta)k1AHfOSo!KqU};^f@o0H~L#+(`RX*aP9iC{C`eTk%$4l z7Mp(U!cpnZi@*`+@I{eBGXF2@nL}M90jXD*=o}%GlSj{55t!!Yff5n&36f|DuT&%Q z?rSnB&yo73uZj9Ox*C?W*|3b90LlK$TxyE2*AUb3R^se+A%fTS8mbjGN5Ju-r#a+16tT(~fH2Co4FwCu)IiP8*59f(waAL=zum+H%9(@oES<$_* z3WPCj-o4Siw1B1$i+rCxES`X4^8h-w2o&!Ngx}(ClEnf{v*`yZoaBEov8P2=VQQGe z1+OVV<3LX)gcO>iweyH@Et-=N?rZVW;M4zz;A7BA(PPW}U=>PA>CMbCt!<{qLAD^x zRsL82rYy~x*EGSOXPil;7?%uRmRwNO(MHI)y;arXbov{mr)0b;SoLe+%qB7Agg^W+her2SJbcjA=g%rbdL4G9uC9Y zC;gn3f!x#P52CpIClkP8JMjb9o_3G*)2=_ZlRg{F1sZIRt$l+7dH`!$fl=aP0^wSN zRXN=UE5HXcSI45q?((_ikRkNY*Q&r9QjVC4$XfuIx=9va)m6bNJB=YB&y*LvIQ=kk zVKLr~|G6fC6fz4LcuL4DT47AxBNOv=8Xpd=hDsRf<0QKH3hmJ}0I% zO&O+6GI&rH_uw}E4_=BM`?8)EIs}fvRS-LNT2=xgi!}X$we=D9QH3Abzyild|U(J{}u?P>F0$4 z!`j#c5FRq2fG|WPI3mfZ^@)iFZJ@=BmLU`eq7V=fJUuHiFP;J@5)>n-!v zzHq$p$=B|`zA^NjCD%9Nx4PkKQB#jHxV~{Uk`@7gVqFC_3Xz1^bQ6=u+)+*)BW&9B zXE{tgz)Z137P0L83?5)cAA`@!tJ;H$Rtw>_6P=N<5wllUHa{IPeGG=4g;Ho6B9f?iExGD&nCz^~MhSv~03b~-I zTZ;X=V2?v0G=e$j;%(xW@h%2eh#CY$${Z$WErX2=dKsh{WEhkfyuY0SXBrkjG&((} zJvKd$Oh5HWhSN(qC$Itq^l5~UAQJzqgin#EeARV5%zTs<|0xiQxUXgp^tr@9rkc7R zB|&2BD;UISBgx)YGu7b_u%fzK>=P!Jf3OE(zoM&vN%LQq@L368fW8Kv+QTuW4ILPh zn6@|?I0428$ENRQiS}@GuRJ4MuE?qy?*tgDz@CRpU?t|orQvE_OJj}{$BLyL($1?- zP&*nqr5}$#OEc9Tpl1Nfo9WX)X-v;-&@@G>yiy?Eyqie2Ozi#Df?C=d(YGL>GzTxWciCu~N z==@Cbb(3qmukK!rMkAfoOnjGwAHv`rnNGgdRn6&=(l=Ua1FyKapXlgj;v#pNmS5lp z%+*bn>ihL8F!!f$k3ThD`_V@Jj{I8eCR$3Gul8m3^-A6wTVD6u^Ju#% zf1QTcjr3Q%a1BV`R3d2k#`8Xk#J*ewHFMNbR#8qe$~p=-D_5_xq8i&T|KySgD*Q=m$mT??PTW4t{r83VLElQT^Yu2fo8AE;uGG% zxck!@N{w48RqMold_MR=DR#2^bwG)FsZm9&vV0YIpe80(UcKxa!*$}o+ z#sB*~iQx8>=MF7~KV_-$D%wd*-pjmiG9F^QyM>!o(uDb5jVf8nu6CeGe7v#!Cbu5s z*S;rhe&kTS*HU}+q_aP7azjc*EEU99%~zPz?cO2QUEY4vTkfz_r2ay3&?+=Gx0m1aPJ}Ggq;HI?39mexeckmF0ejg66dR`|H6!`Xglx?C>FV41f8Q!E{Jn;}*F1RusdfgQ zf4hcyhaUKPX8)h`e(L6rJT_rJykz@jtYgcyw{9J}85h?x>BQu!#JXEu#N3K+n-*_< zchByj;lY7K&kp?l7runRFVLjBT%+|?*oe0p0}`K*xU~w;jof~#d?d9B>dvP})X>)W z>UCEs(~mz6nSNlb@0hehzmvS|k&(nde#7ehKy94wWxUHX5KnZ6r<_vw#8sg;li{zo zsEH!K_F{MQS9J}W=Paxz)u^}A0=JDl=yt(vlx(tKJmDyKI(mbO<$5SD=}{U z-&!1K1rBhN*N1oA@;o}uZxgT{eaDo?L;0@@e=E7+Q7wB5%JPzVtuOpWLG4fBYCtQ> zb2L2C%9}Af6uTWE4+-NF33z(1Np#}?E{}clAAB8nmq*ISpr~$ zrM%@drg#XP2XqT^kX0%~uu1weXzC!Q*dKT7O#SM9trZ;b>I9Gf^Pq4EvsaIa8V-mL urLK{8c$}C=qV)|b9mH)zv+8-9ul+|F`Ptp6Lkz+4tSw=O5+ir|PMv zo_gx3r=GKWCeOZ(JVfNhzwf^%dK^#wYm)HjK`WATyFZyrj|5*XeO#OLa_Nk77c`eF ziCgEy=bm43=G?`Ltz{+i&MJv7UtF?aamnc8r%|EL)Cnwa?W<7Nb(Im}7JsY38 z-zn{VDl5s-`VgI}5g7`5TLSSC#9Q$s%9FURe{9q4K5)HxY7fF$GhO#WoKQq4Dg+&KwhLtU2VA? zGN8|>jW@^71VUtkjM7kZ@O1q(p}A_~XPsw(kYy#vEIOEX7~M!$Hi@>dUh&7W>ExrE zen#}S*N8H63du1A1%1494=9m8OuAV~6e6<LM=Al}r zMGk2pqk1{%iCWMkdLt;W@m3VZDibgTJKi;e1E=~DsI@m@_61FrzwnSJJ5XIi{&K4y z5E;~gin7p~cRYn0^O0kw)gJ^Xo|Rrzrkev8tSac^qpN`d7V_tMO>_(+WE39Ka)Q+c z6&847O96SZ{5AeE)=13I69bVoyLk}8ay@|z-sE78`;)L3prQe*9+Bh_h62f<{D>wS z_yHEJP03*#)e}&LH#uCzp(1ax5pfhqVK3zJi2Z>kOddVqL%P+3^pN3FRgp_o*?Iz< z!qH5O{NUlGwGbH+qHZF!RH2_gj^dWYd~tAH64E`15nwDeuL8E`;feK@Wj5%c${0Vp?=jC`JZb z!4za62*tWuf_eso|MF5;ba@E!z`6ny$*DUDX?g;lBb1nmpum^!Gp8X^6EG4d;2HA+ zF&z;F9?~FUfj8_`xr@@dXMm5VnQil*+aOdJ37RBB(A=^a^ttFordU6Hi9~;h8}& z98~4b1OxL7Bou_gq57+!S4Y&jKvtI<);xZqw~B@sX>dOcS?GEp>nsG!FDsm-_ytk| zCC)}#bl2+f+*J!Ho+LKMmY+w_GbC5b5KI$kY11z&Z++q z=ZF;K#?G@VVEZO-MFf6gAu<>>+4*^gI%W}d4(G*8BXKUWm)GP}xUl*DaIUogcoR87 z&5IBeT$U83UW@5z7&Q{?Y^;!d~=?3xJ-fsEm9=KtPid z5P0-)uX!<|6*?l9AYvsDgjhRS{`%3N%2bee>$-8kA5lR{KjJYXk-|c21sICIk2!r6 zD)xbci!jjwBK?rj0iLJ%Qp8O-typ#dVifqozWOI22L)u5ORPjP1+2>f9aa1Ow%QNc+7D)EKad|VZSAKCI)wc|yR;w754yEa2KVRcLO5Zc z$GQTdbbqqYyplzdA#x4Js!s4o{cOX+fC3w@I$Jld5;}b!T&!-QV}+6!NJD7If<77= zkO+N<$DM0{T?W6ci_Zm~)64OMX@<$X7Rl97J@I2a6W1ZI)^V^N0Xlm+k3rCt%ELBs zJ<`eCfKZJZeJFkwj{!FTBcqLrqqz~tmK&KiV%~%Y+Hg2^(9BJUyXdT&0hduzmoaUT z(Wv3r1CKFY^HwCG!cvpl5Kr8WAbt;vwHdLH;kZtwaM7*U z0@&P&U{RK<hs^PQJq`7_|x!Gq6Nlw0} z4D*gg^QSiB8E*kpHuEEK9Me9{x*xGPM#T(ux-_4700h>9 z2o6K;0CLu%Lp%k^;x>N>aCI5DKg^M0cQNIm>Y#3zouM~avj6mKccRE(J(5|3z%qA$ zKdYqpqY%-_R0_eBAwP;tQ4^MjCagoR&8S=A=fJyW;3j54MuJso4?a98si62jevoyn z*3XU+Zmzl~#rx_%Bub#bz|_^KLc4efPDJ%pkE&>@PggItG3`~o|1_1DcpQ~TJb|FP zOIu6}d~V2k3PDW|&(Uh@h4d*8!t=XlAQQ}7^;Pj7wr-cPQH1QKLN1syh5~pXGDLc; zGt8$^V1=%<2~+f{k#iPoQWVT6zu$Hs=xf$a(DMY)Z=%?c3OicQGMBK|+J&d%DcI*F zb|Ywc4uRi#p3}&mc!BZ1K+wIREKyiH+}eY91v)0rZ9!q{w{V(rlC!%XYVNC%QLZO3 zvU$rr$pjuCr_Na8z~c})F#PQ=!39H(^(#EHW2NvEdlAbaBi|$bu)v$|HD3hE{IyVm z;3Y(Aes`b)<`WSpu(MSF1ifQ;Ot|&fBJ&j{G|b=Nk!9-x@_GGUaXZ#N;Qii6^Q*3> z^%?+p84aCNrw&v*3<3U9PQW$5U>wQl`Of$PDN_9&pU)TdRKW|UAL19NcURll{}A^ zp`CrjGVtw~(Jwvb8>rnfc6r<_S#8LMNw9}vld$T9HQRHAM-VHteuuFA?qsO$WE`nC zwcnRunJGiOUzcr*WHu~XFG^ytcMVE_GE6fyCPiGfiJZzdD?t1vi&`~N<_qG3bh8%K z;{lgt=>c6tRbH;7^%jEY%#cxZNJsU3RFoa_k&zvv0Q=cGI#(wu5_+=+Y(mhJEHT)$ z;KL>%IbYLxJTMaIN0`fJ>aM6`G!ltMq@&`A@fm-B&=WZ*l!QY3<@@Y;Csw}g#4zPY zm%y5UX_*Hw47(USp*i=0mh*zL@Dq(?8{|s zI>U`@eh*~4*0c%X_`Ed{WM2h59#We4w3t5}6fbYSk0i&*XDcUp2WURIvX&9-b!OGGmgxmDinC{xMSZ>%QU!DtpxS$|4-^*H-emq5Q{s0t7MmY00xbP1p zm%a~Lw)@FPz*P0q6CdNb3^miMFg|%`Ie2zro}l{!k`jMJpqu^JZs8le5$h8mEX-qK zR&OA!KLHHIs`APF46!WoTc6_zFClYLKTn1sXXjv{^=IJ09h84Ttmb8mV{|Bj!ND2F zpm}>7s-?karN*JZaz0+@IF%6LegteXqY^xV$r}Ds9Xv%Z9`kRUSx>+XczIjo3xKlE zX?=;9o{h(3*8YBR9CRNKQ^Z> zSl@tU&CzsG-QW_#{2wOo<;HvqOm#;W#`+Ez8BegM7vbTw9*vDHfH>4r;8W#t=jH)# zF6j!9ID}kD7%-e+rp8_EQows|H5B$Gz6UjQKWTUpo7`wRZqkH?s4GPWhz4}=3;SfE z<-$nI7w|gW1L^`^ihB`Z*27F}JA_OFfu7(dm8ln$-rC5)v!)*@NiJ9wuP0dgB-g`j zHUFW?#3Sa~tz=rDsYh?wUzGl5D_LE$FO4&ZnRa`&P_ra%R46@GruZ!|Q*MMwUK4{W=1wJan z{103*=lWTY73P2r2UW|mi7~GI^scV`^ssIYW$%L?ZEvb0D|+Hko>Hdrx#N=Aoy+PA z(bN`?T25qSby4aba~R5MyI=Ri%uS5x_9otd4Cd|2BIIR{{r$V0R*tkcJUY)id^8>U z=qCD7wdNL38!NKduRlzb)D{|c#~LAfb1oQ~aJexv2SLON1I}F6VGF|^kHz8|-0=DwfIp)t|vft3H{&L1yu!QmiSx3lv%lIwOUBy#Qi zu{#;%-r-{(!w%y=+xA0mJDv>$qQ~S^i`np|y`CXSTdIhdRgO$*c!$1&Eq2hhwEx?# zo-^2?L$@g&@IU3IdTGz`bMOZSr zz2YippbXSaQL_NXVHJwmoaMJVB9cuwk4pRKn?c(WVG~Lt%_v~(Diz^TaX5AHQK&Iz zz$_qCbNvByYb@U3XRxZ(BT24>`xH}E0Nq1QEpviu+xLG_F&yqK!0Ml?R^Y?n;;M&i z9UQfC?T{a}b|^@yckO{3K8FIRD(I?N_lDDIFgYwi&8$uk3X2CGNZGzmLi>%C_LF2q z6tOyk%IbokqNOWBcLln&fw{HNve*mRhnPLdWZTi;xOF;#mOjs0#2l~IF4(HUZLlvG zOuO+!6Y%`91d^#j&F)}dgeAkVtyVO(Mp0+BvJ0B;pxDduS|z|Ml+2|{w?dvbVl3$# zOhwc}rFlQ4sSeoug(69=uh9`sg$VPbeZxu`$$AiWC#`-dHG>*^2wC9<}MUg&?g}CXcULzx(blQ z|HUIR_GL2~3WsE&cn=R!(7^5#vl1!l$d^;%7dtd9RhcYg9}?O#W55?iqEX0#zGQdch29OyW=3%8FQ|6^A6aK#H>bz7u+x6^8R zxH^+C7GbR3XjJH*h_`g3YJc`|fG%oTkSAbDAq(4}p%4!3S91;{X!QfkZKh6^`U9%2 zapznG2?}sB2?}vyCWdA7HyD690L1JPd6Li{7c)erv{GbigV&j1f1x!Hw97DE)XhPN zCD9aK9O_1A<^&CEFfdsEV{{*~5bJ+#Q#IW^L5TGPQ+IEeDZ4k)mvx?xQ7>sP^8^Tl zj*hbzOt#HBFw2U0BQm|>e($FfK?^zHGu0g&-IXPZF<4n}VnL{WmU9utOrduUzM@WD z!)d7pYx{U&-R)}a`jK=l6m|}805#wg~C8E;*II!14)kshoR}5#V zlZ_&xD&;$5P@4gfR5f`lnw6|UHi~803lN4BlN5Vdb2aJ-PHJuf&*TUMwurJ!(oL-S zV~LSKtL-+p4;-RO$*MOvQ!%-N^EPT)Df&>djY2*w=mqHBV2)-Gqp)b_b0xRh7Wk>s zktFbFniwO32+W3RjYSZVRY|&yQOjqXmW!R`uKaKt?GjXaR|}5KL&_PVd!uvJX4EBJ zt+v!oEvagr9-jlFFvo*al3Of&ziKf30`>sYV0)N=bj95JzaP+B8)ZO8gJHX28T9gB z7|}(itH8@{2UfSUm&o^JQs&DIBs&dPx*F#ZAmx^Vy&1pA9)8!bPI&l@KZKagnulL= zA|wB0q{d(_Uk$%9@@jrN#U6Pjc_U~J8+2iaPH7frlG1*H*kPsp(&6b&!B7{9KNmRW z($J3ZHwHa~C)znoEytlIHb-%u%8pro(xY6HKNppggUPb;bt5qeT#UqIgvG_?6g+T! zW+LJ2>3GCh-+pr{V%1q;ui-bRA?kSL?(oX~V9{yS{+1IM?Q7v#F}AYJ>3Cwi6A#=O z&KJ|#ntQ9J=q)plkc3K8R?2nq(krMFoC@p|i_jB6aGikCk6X!??0_4fhn?JRgK;;C|$ZFGkV2c{gmNy?Y_Jv|=s>@w8}xw{9dj z>LxZyLe;st`4+OMao6zyoxpBA*W?By$?YG>mW6Dd_#=lWe2HG5TT8$X!pU-%IkZE# zmkHIaq@|#)>8U5sg&}h}a>=I8 zK+xxf*l#ma>jL2AI;~v@@`cQcIGBWFsU8+xj&K(<7v2mi2bYQz7gKUgkm2 zYJofMtWYVin}wU<;#B#djD?w#Vsk9Q+%9Zauz=WRkSle3-E$OfTV}_4p+rs!XIm|J zc&tki@?jV@-q607ri8O`NXCb4LT9xi9UdFUU^Oq;b(AAPIZu}hmQ`fv)=FlBBP(+i zBHWZXtK$7I+{L^M7}ioONFH2~u&-51UtSMURbTd)SQ8!130{t5bUw_xGo2vgTdqKG z1SiPp$-d}dZYRj}NlxJg5Le!|yDDFUbsHg>=S#{H;k-%?vkdD>&RvCc_DSd9nXTx~ zV*HVP2^Y$~ge5wXPvSHs-4TRanD!-18@~$nVHRe(j#XIp_vdP-4$ZKNa_=KLYkhbl z)K8rPV$5=_Q~iW_4#7F`IDFVTRX3ON+6<1$t0vC*?u8t$EtJEZiBg5KA1DjWHAvvK zwV+tQK_5Oc#a1H`#Ec8kz~w19aPa^T`$YUSqI(!i=Hb4vs5qxLlV zs(Qlvg_dFeBBP#b;GQ5J*VEq9uy@&yd@W37o|ti^4li80Ad<_z3*j*O5oERpbn9xw z<9BkSVP7^R6UFY?*PxoXNbF|QHV^I?$Dc&Dt>r~7GMTJyEiaDmlcY{ZDsgLh=Xg~X z=jIzSS&+dxynwFpK0?yXRX{sr-GlM7g|0hV>c`x2;(sf_bZdF{toRyEG_L_DwQIQ+ zvF0BmuuE3g=dR;)s6J+{LoB7q#BMeKzDsHFs}ktBsS?y35}S$4+SF`tJ@V(1bv+)k zLC`Vd2*$9NM~COz!1*+lkM~+L^Vu6p8N5_^H*h{(<>MhHGoO8#xSf0(IiE-6{9iffDBXwHhw2qtB-7dW0WKS^H~W#aFJ}c z*mg7XtXHW{4*q4+YqQRPRZrkafWi;134HtW87fXW*AB3^41+89=rml%U1n8xQxaT5v07L19H!+S1pS>$A=M~Q zuGs7RQiYMIhmHj{?**A^$tuE(qyY(TewcjNL%r>y>z;$XxG7ErgM^gGleQz42#d`u z5$Zn160w_cgc9#NT8X%lkXa%YQ^#210jRqDI^KV@645G|C8B?0K7R~ajals%_rTGL zgE3_m$5S3GYmTKr>Hj`T!j@nQY;zByC{&sa0J}BkAmIoq5W{jVC$V9PUu{X5!b^`L71AS!f3BzM>rhiq}M!x;-Z~3Pm10inbYviV2GQ$ZPq+~GlJ2o z(0YhF6Tfl|Ys9O(Ee`|6Nb;+Z2#z+KsB==+5v(odFvz4fQIk|N8U%CT!Ei1H%C6!ms)$HR3?|`Lq{m>n-6eT9MSj`;E9k5gurMw@y z1J)k-58VNiJlq1udYLZy7!xzWHP>^oH6fs9I5VkhiebTAZ))8?2yL_ znJZ?TMq@IJQR76A5Krt{F|Xzl7TI&iOaW$rV*JQc%qLKsea32^x^hn00}Tl$@kVM< z-a~wfibrLttKwNLPl8Lz;<5wvD{ag=yToW$OD=xoK38VF z#{Y)-aYyG|dAQzD+EX_hSUefqb%L4wSN86BycbuGLA}iZ22cBvIE8~EYgy4eZpg&* z|KGhkmPjp|u>@>$4!~*0x_8I4?e5*l8jS4>!w1&T{36DQp2Rb#y)w%2F2ij|Je$Jz zF?XfnJzK!QTV4~bXlX^{kb$-{ns;-0E2o&4XoHB9!Z$+VVWmhV=qM>lX;r zvDF@qRs8{D!31R0OY(Awk`p-^N#fj+ACvfz8d0%X;T|NMF#=;>YK-WYF-GLleLAil zN_v|;IH($Ze;ty+a|`<^E)oYByMZCO{00)tz6UG7H4LjuBHE75JlY3E9G9i~D5FGS1ZS(JTKxIUxmN2m*DuxrR>pB%}S zfWCo$ZSHJKrMQXYAWtayoPwoZ#hH%{~*Kb$RM}La4sT#o<~*1KJzrb zIvZQ&wV+mZ&mVu#{HMzt*p)M$B0FqMte{v=yiv?=Q)3k=JH;8>SI(B9>n@dR-vv8D zN7#26sr=fS&0KR|51k8rV@zeg$44BhUISeXP$_R%DSTJ+4OGuoE$;K*%eL`5 zpv)*NFjSbun{IG*g*bCduZNo70tH^Yl5d!#PDOCZ|27ne?H=}-lVOtTYY`s;2^sfc za_6p&Vn0Ut1doymmISeo};Nfq_hmye#lTWzPjvPTfqAxtDghHq1T<_xqNj3ho1-*?M9+c*=#@_*Ax%-$NRFz97CBK$6qaV-ps2 z?y(8Gve$s!a_m#+cpZ*k9X9xF0B;JI>IP0=fak_ILn4ge(1rCVve=`}+bCB><(0iz zv+Z|lb(u@6v(9u8j*r0oLHoc(a=Cb^nGt`kiSNbqLg$57X8k{oGG$iGo6z~ddlGB8 zZ0qMpke87$pQ^MFxJC>9Y*Iy{tsTy2@FqJSN!tX)7l@f7E< zs%@ps11Klk6R?%ZjAkD$fqJPiFw-vHCY}ajcFnxkG#vGm=3t~P@O6;&u+?(A1GVhs z>av%OW4274;iEuVv2vvwT-!sBf?h;Z_=c5B?9{zZ4{piJx7ym_Gpv0+xV$04bM;-? zR#DqJQv7woq=vr*$NWDd~mxy@Hw-;q%oD5SWRCg2N zDEkADilejG!x`3x2($ch$3VHX#r&P78Ti`53Zw+(cEWP*s$vP1HiM6lhP%O!KrHKH z73a>^F9;;}2*<1YaTN_8!5E{ioGG5pRR)~<)IcbMU*>Krm-PoQwQmQH!|mWg=Svzq z&KvTrG`JwvCD%t!{1IW)`Xn9iSZIC4Pzo(njn{=$x+34f25v&Jb6|jK-73RoimhAJb&%mMO za|G6(5x_Nw;)JRcSqm|EV8p9?kDJ4jZi%o@nu2F(PGj(;nR?9n`1@Rex>ktmlrvZK`Y1) z=kup?a$+G|Vf-b8kdc$y*h@IT;O{HoKIL+>jrkWSGh}#Le!}g=t0_!Lv6@0_7|nl0 zT6rs{@TW&&W+w#6FMtI7Et&MEF#VT8&nf&VnppBHCN&cLP`%dt2cilso&kpOPhhAD zzT{kv{O1?J{s33;FV2b`1D*~f{tZA~G*SrOla3`8K`8sS`GVO=cIawu>!EGXhm2cl z1u7F4^ILFIqfa!oYHY#2hu2;-#x8PGUjl0LYw)b;<3d|Y8Pm;;`34xC{NNLC=KmnB zuAsY$ILTE+$8^ajrqSG))N&Pab9-X!kiW8Fp=e{-^Zz)vvF!0~zQ*Qn!M~L=mYwkU zoW`=7H*FeT_T%T44_66X5LS1xnd%PY8hR_&ROv^3FAkF{UZ-dAn@zCW&i+_`RW12& zR0`S6p7r5lQYl=>{2bbmFV`Wve7LS=%Kw%XH%kU9v=MZOZHib*Sx2mu({$x2QoCuY z!Bttwc}LWGMzAf7?d(nT zBTO4nf7z*#Dz-T1YTDx!`d)o4fSKF13n4q z&OVoGHfFy+XYWGn$H>HA6}8W1X3+*mktvWMVJ*&8SoC^4a@hhJkxP zI6**M-KD`A`YMzQMeM`sB~xW7ond~R(izrODV=qOJkLNLwbshindO6QS2t?-9-E=0 zgmy84vBK2RKPxfb+9tbbvRD_#0b%%2B<5X7pfB<;3vbNwGKhHvf;$Smd$EY*=kvu}j38T}QMRCP07 zIg>LZ=k%k^2}yDe>IF4J#$!Eq^3n#-%lzi>bElB~Y3vJa^G~!XPfu`x@;#`*4oLv5 z%>&Rddq=9>EVCBPwt`|7N2>`RU3Zi^IVUgtVjtHHJ5i4QD_J#%pOxV{pKgXwgq4LL zk&R%HtE)G_f-}CTgBgt5+?>w>O#-^AiuL}L^lDd>-w!_z!^RA@1M>`sfl+!65YWUI z+_JR@vg8e)|L_H~)JJP&3~&2}8NOTPhehHwPrfmQKYpt3Tj8bgfc*Z%>hll0 z3JOxtpUmSF-Gl~=#OcWAkADDHAp22f7-{&3uS$f*4o~#S%i>{g*e9=>1)SHr`OWTp z=IpxlJhA&lC4YnTvQ}?p8Re?OLPT`4fQj*Ovwg=q4Qmz(O1|-gi!uD3YMA1mL%8OS zNC`z+BX}5Al*zEX#+R}~RxyICy7NKqw>lx7P4S`}S`x5215me@yCBA@z$1r(RyRDY z?g((tzbjVdB^>opdUsEjaY5iuzGORPw@@R z#BcQksP;&Ga+f-TtD(NNuoqnMJ#S<#K#}wg1ry~dt^sfjD6aT)`Mu0Fcyz9TG*>LW zkvYY+BE>ZXt|7%Wi{g8jYu3@Z;v*Xnu7+jBr^u1n=Bhr2F=Wl5@4wIZB1RROd&CN~ zD4uXVa{jOe&m8>YKgRRIeJK7Nz&|(sYa2fRjp@c8518q%YJ;x;?o!}>iho$s$lpd% z->*fdX>IgOnWe}7fLgl0ggblIN$jwDK`FBT=A+*rCstEDR&+ym2{q%!cPPtfxeazI z3+h`DIb^_d7|oSPDsSZ!s|wNV0B#y!34_^Z0=HaZKovIQn=Byol1#`Pj2caI7bp4|;gqMx=N?`^{)T|sMCdMy?K4Km`*@**Y-QDfqg9V! z_DP5F#TkYAPNioYURf7S$|*Ls|GcMHcQcMsnz}uRSCKs9Q1%Hf)?26r?Pj}s0k^-020OY?`*q5HWu9+s zVlL_PEo^O}1$>yDy2WH(JkOJMR38Ly845M^$Cd*Rxvpd5OzzJf#vQsq0fkt4r80V4 zvo2Lvo>v}3dD!#dwJlTfFNnZCp`&p8!!|V!DUs9%x5Ig;&}QVQE^cmsjFIm1tzmdB zGLZdOBWKI6Bj6;T_uSf%LX{?iwY-+RNIJz#HyXEn6` z2B#8I0~z`QvbtuT&zg0Q-Z$yj$&n$oZ zWL6p5VX_*M`%QSNSTu=OKjG6;&b^>do{SsZbm$Hf7wOh0P>A`pj7Cfv3qkuA632kz zlm#=~{5(8Pu#XBiW3v-qQ1v8#hHhu*$!&O$5l^sOW05g=7vmEW9x@j2&@qnD;}Ixy zG&uorn`WB&K1WJ)w5?CRb&Dlin7rfQGxgX)k2Mil+_t@m%X7PPZwHbuGb>WLO`=|g zkJ*@2(3eeP9tUoV%KG>Jz=9~sPWuM{pegy*_iC_9) zs`O7`w1wsOFcdQ0$Q5+8(oEMcS|}F=9UD}k;isOsy*<_m;9Z07&P?YrW+12zcw|ev z8t>H!@xW^p>-WUZY*V}>%;F{B@Y&gAYu5yZXSUJovq=>5i7%`=gO zzmj9lLS&IDYG!s&N_LBOYa7u{VR3fOo|&VUTeFc>w@yJ=;|a#J05boIw{cDdCZiGA z7O{vRY){}!ifipn)!uuA+Mlw(_2GMiSJAM`Jo1z$P6PYs%p^Ztmcs3`9PKlQ%h0Vk zNR=Nr(k*&B}IyB4Z-O27mRI2Y9N(y&81Zfw5HdUGLXNvlXz z3cQ|-UrC92;%$|t+J=8+DBU)gKXcope^ccYMTIsIw(|Q9vrow};;%wXPkIR${|8_g zO;$dnpU0J%fGWuEG+m929W5T_1iri=Z6h>CuS zA5S_LNOTa{!|j7t)lcSfc(ir>K-Gl~&ODAQ%fs-rx)~@!R~;NGi)F=caH!-Lowyol z7TJDl0T4OL#MK8xs_}`(VA-8Zl8xp0Hiz%y_MnOP_6@~1Naff12{jh$a?1MiwYg0>gY`kc%tB*9en^MNPc?N#Wj@#0kSPZ%4 zAjh6a$fqtt8Td@+B)``tqGx4Lsb6)%E}%EtBeU-u40i> z`k+F*nTZ1~u70(_Kik7*!}@)m6NBnaRSOdGHyG;g6QpY{TOdZL1os=x?IDkRYGDu- z_bEFyl#QyNq05)Upy8s)ptS_totZC-JBA?>iY zH`(xgvU8CqU@b(*r{eX$_i{B;BVHsH2*{6CRYdt~3-wK&RIu6~a)&D2o`+kuL!&sQRhw$~!f@gL(^lyi?)ZOd6{@?0n?*U1Ww7bC ztr7`G>QDIZwMvGS9i}g>AR3OkG@l~)A-5|kxBHo|k| zXJN@0qcA^f#*c)C>^;?ZFVrGl(cY^45^`g!wiVcn+$({|-0)?7k;D1@pGqIlvHj9lwJ9C-Ex_E4 z^%2U@2NpDZ3ofNejP^DA{c8I-8yVs&P=dXEZ0{#pV2554;$9yo&J0uaF$p%9TpJut)*9A^z0D1|>FYgE-X55=Rk709$*ELK-+6KlaXaTS7=A0e== zMvx||(i5wY3-=nUu250;Mc>PiB$riXuN^0ZLM)dxv1G=Fq7y>#M@%x+MOOZeC%%iR ze5{Z6ed%n}6+S4%ORjfX*FX%c0<#SHTr9F+`U5+vK8(_p(}Jj>Xue)(U5ni64!^Q@ z*6T==#eaHYwIg=AsA^mSZU?Qdy(cb52K$OBT(bCgU4Gm093^`@IdKh=a~akXa<=X2 za904WOJgS2AX>%!tr2pm{>G`?-}>Yl-M_6ZMW;jG%Z>Fkilhg2MZ8FQ-~{P`sy9xQ zIC`V{<~qLHP^tQ&jxYP@1D$^9r>P#NUvfEF{xLyT2>yBTkK?)c2MgsNo8pht@SY40 zVic>2^{)E@k-FpHyz8#!059cI9d7+o9ZsyN4vT22JAeRv`%iel{H3bR!ysMqDwLro zRJa!LB)2!(B8@S3K~u?9LdO&;?T|4X*_(fi1~tneM}?knC*pd}krSKROO$KOW`(da z*Mn^m8xHI-_>sJl<53Yj8hW=!x*F`E(glm1o6qx6HnbEcUCz zcI=@N{8a3V9QJq-lAK)ZQ<%igD(>dz@+Dn-leSP5fS)J5o&^>miyba4%*EDqv^ZjJ z07=wDqs5}8iBOSua>)5eHbu_A1r{-HlpK{Q+RhFwuiG42r68wKMx<1`DJ4-CCmVZz zJKNFK_G7Ma_irVisErXyZPy{jnfa+|(A8lN-9l|D7wd*e}<`1=Thu|bBApR{6 zk+QXawUDZiE$@&qk}EQf>o6XHp5QdKzmLKhP=$B13qMd`S4{bS%w)v(k3ds%7vjIM z=wtjZpg`hrKstgL1&;$_9BLd$C$gxVC@M$|65Q0TK|(hPOw8s zj}ua=j1yxaCyx_s!ATBeY?uNpoV1z~U@EW<3ASgt9?>cT?+o~828>{=l*8#EV~h_4 zqhm;g4Lq~(4`UzBv+>`Gx(5)gJH$apG0g-7enK&FTIZl2~_pphzE zmS2m38bqft(XAOoV?BvmLDa%`8qC|6++{bngVeU0Eu0JcTCmSj$gk{%)7zOt&O?B8X=r*>U9>uw&)HiHDV z$viO29L}y@BxTRU*=??OvXHmvChG$q?B$YV>e(4J5MB0F8wbgOKOn=WlzEGVvj`Xh2lfoWYB8 z`eohCK(PW6_W(%Ti=d3CWJK!sYwGcu2O3gX$n4LKehJQUsm=q7Ht$0|Lr&$*`w^|F zR#fH#4B!j>EP(kS1NrXab^ybhZu~7pTw-k_XW}6wCmu%7@(2R_()^=%IKmup%U}|F zn2c)}@{$vOi$7BjY5wtroaeE_3+dj${5i0^rsfS){t)k()bcn`VZS`AClI%uWSZ=j zr|?KT&57C8PCPgZf18(2>5o*jWC~}S&oI69EJCQ;O)n>o9qhx24zccP-YsuML=Y zSd-u8Fy*iNPaI-Ue^46qVGhT`1wNFx0kVZ?n}i2ObNqwg1iXY?na%NQ2Xm+wi?kxi zCEy&QS42yH5UEZb#+ZdB)2uGy&?l+Oq3sYoIf}zQqLUioUlL`ES18XbD}>+`D2hVTTG4*M@@67YaYj+?aiENEQebqeoYR?r}gFV zYmx1$(VX|ru}nW{EZ61sa+YmTEz>-VRLCjePSNUfqRF)rndZ$&oSFnam+tAq(*AnD zpBqDTe2`PaH5_&+=5TbaV1{$JA|^b?uq{`(iGv-dI*93|0 z>d%_@doo81r+{)yu+dSrucdrAM5T$MGG< zaqoL`0OzU|Yk5XWJYQ;bR}It5l3ws{=~M4WS-0dc{b1=$cZoc|6v|WUnErLa+$(&V zBtBkr`+>wyl3x6d*vSd~n9phn-yOp7ztwS=E7E35{0qrDNow>bvC`KALNk`bn}z2~ zf;msx@dDAnccLp2KCg=SgD87Z$Q6H%KjJ3C#}Sf3jfi8_0R52>#-#d7%8LFNghwX0YI=hPkZo zCv#X-%;6c5`nvGHQMB}LsnO}uQXQoC1tu}&k|O5cDiV&6Twe<2R!DBp6(wx{pGd9- z)GI{dF&Ne(q+UvzUraVowbaEHw_JK&=Jb~-=cd@{I@OaRG*l=%nCxh;);_${9{vIi8}y}& zu%`{-66ch0xTT)MfiVsr5J^rc=lGL?8PLG-f7EdJtdu)bc=i@eZj%1^C)K}1l8q7; ziTwA9T@4V)r$e_PoCmQyn?;`YvpD{V^ue>yzC7c30{c8XqvHSaXnpaLhA}CqN2etX za{+lIZF`3$4ePKG3m*u|vxY5ccoa~MKt=tQH0%VFC(t*2mo)6g@-8gUQ(ZVMfDKvB z_W_{Y*l;Np=oCrI!b+RdR@!N00!^*qd|CKKGEQ3#Xg7Wv9XrH;t{$?ap{v%B`UX=!73Q=EzR=Ckhk!V3kU;mNemn8o=R*W~1<-E%dfiZgz5w(npeBJn9>rX` z;Vgr>{2EZXRzjl%dY~6`DZ@8BIPDEUyQv4hKEaT;n)CIbDFVG4<9y|~A;@XJ05k!+ z?k5Pex{-BVi4z1)`=Sp+wYbyDP#=MMHPJN!JpyPqbbGBp zTcNWFfUXy4eFe)hmNp5b^@I&-1%_U%HXHA1G0!gxSxd9=9uq?~kZdQQ_XU~)Xg6;2 z9u#N}?7FLVDt#o-C_v@f9Qs(G2zX9_m3=A@l`(WW{aK*fvpL`C^f!T80F`TV=?j70 zL>ukU=Fz`sB^FM-J1%Ls1~-}iEl|#2hAyD5;aBo#R5t~EL#^2Q@xWd6tp2-pmLjwSD;_mkRi}}T@@GJZObFwPRkN#-%yp7BhUelf;tFvp`9-* z&_Ek15NNZ_h4+8+Xq_!fRG>#~%3^_jZ&P*_XsHc#6X<%IvP2*c`WV-}OrR6(G+ubZ zo7yGtE$lq{tqqw1W!schn$BrhC^MHnng{y43f}t~x{&&6p3*$}vzMV(8X{@Cq19_> z6%7;UcLJ@ZQ34f8zAI>~Kqm>bj;6Y}+)OiF(5-Z;P#%Cp*U;^BxV453CBciy3C^xP1NAk}wa4)_;)U?Ls!LlKR#8#^E@H4}b~ z`kCDK9-6>;gHrm{lezTrUS;4sZw!~ROv0iuuLAR&pD7>AW15q*IaD$S`|r@Eways$ z8cl1RFQLDlFotw=xO53|c=GNdFsC#kQTiBYp zyzpVHQm&D(wbR3x{U{x(vJ|%|(xwW-`qyYObcnr`9xTJXW8T1McBoe_%Kd#F<7^>Jdb=si)>Si#ZD|&?r%`fv4a!|C;X`%( zfd5PzgfOAkApDcw6d6R1dd7f{MiW8#Xlw?;hw5gfLdK*y&q16yD;kY{rkx4QI-T+V zl(5-zF5;JZ7_(L4+a>PE=5WyLvK~y8$lT({b!Lhi%XT4TTSqGpuF=+tv>Qa)O`vpm z-hsHPZ>(w?bkz|d*K`~3i}mi%&m}$Qphl&^9SFbZ%QPp2&hbtyfdimDbX%zgdVeWH zR}_7Ndo~!M1lmKz10MsIZ33;NQJwaH!{>Hd58ulXKdt5sJ8f%XumMX1V5 zr*)?O0uqjC<(4F}cwa!jE9!Zx02$`$DDk6M>YLO6krF=p_ZAypGXQ`rOXFe6xV%18DUd3!AN9+C z&QK7_8yf9LNju*Ku%&)S%>PE9pU+ z8LguY0x3(z_IpEG>fsa=NLli5>gGyoq&k&`(oc^z(s+SX9U5u#a8>$}(HOUANh3om z>D$phK=0VlI9wPTL8mndrARh{F3Ny5C61X30PXhb^SDB76;y`>=JTM!*Z z{}xC|Hj37aO6MC*>l76Dd%sew%C-r#CvdQkq1P28o@g`;p>XjFIxF3tk}|O(&0am%c=xJv11j*Jv6&p3_!R8NM4bn)C^7$|8aG z&}5_0KbpRDrH!R;?X*|2F`iTDahz`ty$u^2O9O0Z4oVnHf3+d5!&vG(DP6)?>X`x6 zrl3!Zu~eUeHiX8}m=ttdXaY@3LEA#d(HR1%emg}z)y1;h?`z09o;Dw!mTW5h%7$37 zsWfz|N@K~U(n$g-?M|iBGoV%lp=}pOr_yFSANQQ8G;&(HM$_oH4Cq`1A>Xp-G+HB& zvZZO%Wkx#RbTS3nLpo-B)9G0o;yO&Hw-hDS*L`Blpp7S{^PNbW1=>R!vTCzWq?=As zH5v^rC)4{j#5Qp0q#p}QdUEP8*oD(@uddNwUMEzNT_U7P{kq9E{Wjn1a01yWj?O}EZT=R1|| z%7A{QAmqCudMbS)kji%|6`djZ#1qY-3l${&{d8&-NO_{u=~jVM|2u;=D@d&84Eo51 z*skYN_FTfBnkCGoYvw74^*NXB7D(xHE?V7fkha|J;Yw?@yV?6XvP?32%?U!5a7MHA;zuXEES zETBFDDNQV(sRF6`Eu`BPq$wBD&oZDF6om5bh%Tg$6hwuw?SN)3bmyBZ&`L_u14z5T zm9~hkQxLd37F|RS3Z!gl5sg}u=CX(;DJU>_#M7WWGb3${Kr6xJIi%en(4Jt=qF({p zYD1@GZ@@0o12*(@9Yass&^J99`dpwZ=w@Fjpg!kG>2zoL``L?V{`m^}oo@rqW$(42 zk9@C0&!gM9LGMOQ=wwJ#_QrV9^q)7U%_f)0Up7C_PWmJ;^4NgIy7|Up63fd4_PE%6QZJ`Tkb_&`Sx|q%pXb;^8 z|FVMav>~?E6*N;$%#|g#(tLr|6;%zaDr%({1X6b0O1qY&C0k7|3ABg49bQ|snx0#p zPFq7S3G@Pe=WQxlLl0b-PP>X8&wyT65Nu*n(N*-7K*}>*ML)hMo$qS8Ng(AvucqI* z(ypcVRGN&i*U|?WX`f|4fs2JF$~&RxS~3Mv!c#9|a-b%%baPsz7^) z{pWS`xDB!YTt}6-Snha+b<|HFHO8%@Q*DU-%X(UEL+tg}Q_mIYeCug|K+4yxr#c16 zTw^_5l0kV{26U@}Am^N-^>nwLZ(-mQV?8};Lr?oYF|Maw0!Wk8R#GMA0ib=>@-8|e1}Da*Q%J`!jnJ=Ev?q8n+~N)YmI8xL$P zx`{rwq3gz7S+t4HUd3rD-%n_XKpW|WaX&8l3BBP;yOrLz)8>!6vFKK+xh$P;Gt~*S zk-i&yN6}_l<4U`O)(NzZCXc(X=nlF=pzGJNC_@d+2so+I_Umm3AN9aCti41GHJ7jT9UIanS?x znk(%=ddE)NJNEOU2kGZmr1R~dT>@>S)#LwOw1fOtrqdp#Jb~8H1!KQ0dYIy_w8vFil3nU0;x87l0LH2&K%#h_(__# zHeLEtbe=#PY3TT##ZS>~SEbW-(l&uMQo;Dz;+^FAQ95lmWec>Cz8}|6yqm7MI-T|c z-6YUPdTjjo;umPh;yv`*hIHCqdPks*^oMbCiuY2}4V<=-9`xR= z{gzs7s6*+>;@9bQ8=BGdqvGFD9SoHY%I-lhhD4r+hP z)3Bqy!iIi4rWDZXP0VE_9gofDcW8@12ZJL<-e3FbLJuXMvQQ?@&*HF2l*%v&h%vN_&?k*lC@#QhJwW*wC*9 zy1<6E>zsCl4Po0B(496k3VV_7lK&?xiz@G3$`j}^`i_|L3>&&%W6E_YN*|zm1yWi% zK!vxc8nKoR(ABtL>1gQyZMUI!ptA$CN1%hj){%RP56~+L5}h5OH|#Xl*#UarPAeMl z5-59YRwb~`4p2-Wmf8nstewU!_8yJ5A(rJm+O|dVNqO(lg9?)J-lLz}X)I%Vpv-hZ4pv&lHdK38u*w8xd{o?nj!IkeIjd$fcNYiY} zCi-LXK{_*)=A#d&RUoC^4{4VTag9EtPwrsJlns7Jo;y|jo*TJ6`XOa0Nb2_?<=bgo zzYnR4op$PgzZ8E+r`r(g^FumEAXTFeX^B9WQ4QMtL*k3Aj)i&_~nC7GKGdnZh zGn(5JVr~;*OCI`3J-6~N zOPTUWd6gdC7CBe=m{P^p8ytUB+BaQyh0$rB(5LY_YR&XYKkey+Q;#Iu(eYdh4^3+1 zy4)|?R`iU|te0DR?)tj*^Lz#8a)(Oh<3#_T4Cd6o2RUSnPM3(D-El>~uQyAja=kHz zDLL+;uZMEplR^&0v7DvVY0S*d9A`cb2PHY@(#RcGm~^O0(Qqcf97=;}4ywLP>F`YF za^&fb5;c0t&v_LkW4x3tZOs^+7~^noYeq@MlH)6Bpw#H94ouHJ$0NSWOCLacJ{pM~ zaD!^$dHgiACND2QBM0W?1?eyFUAW&UeT_Lg*1|j;Zb~N#Q!AFdLcG&W;!l*Vs<;Z3 zt*UT`$$S*P!MBibHYm@deC${L{3>c!hB>aEpPnfU|(JfU|(JfQwTn z{L{2JPO##@#eoYFpRw9y9i}ZNnI+KwGuvoa31YW#XI3f63f8hLY%`e{{fP#)XRJ>mT;Y{x7K=dYObYq z-pUReFas>XIpHSn*A=%Q&L>wv?aw9m(H3v#;SbSv@AT-;f!8NLi?GAw=W$1cx$W={ z$0_1|iSMU1IDy z+)q*)IBXmbnq?KUwA~`lLGOVM*Jz)5cZSz%4KxEg+d*w_^-mG++Eh!QdUxT3HmE(G zTZ;I+p>NR_-mW!wgT5|nhZfY#+DEjny#t4CKGi(KiKpume7QOE^-sOiao)bgyQcUe(3^R;&{AL3 z*k`c^#JSEBsm_zUOMU&uK2N1$X&3u`Q~t2NRDYx2PW_!gnf5FC$IYEjJVRXR#&!EI`nGK ze&5r9QrvOjJ;9}Vw?UB2Hza(E=TqO##ydP;_%0iBuSYX>XYKH;)gJ1}l6)H&k7Vb1r+K{CV_V?aYZQ1Zjk$%L zysViDZ(rl0rW)^By{XDa^~UX;`XN4hbSbUX=XBmcBaGXFP2QDKm$llvolfy?(Kb}h z^#-*G1JCi+dtWNqK=s}y5w6tu{BEr_6la!|+Hugy7rv3Bl*|_(*N;lrayCa+dBb|2 z!B=`G7f_VGwfe3>8>keXC)aq@crW;rvEMkk@&$wK;br3%ddOFySLzj&pBUSr zvA-Ih(u0A28f*182Knd~l%i3+c&&P!?O}r6d#K@`pm!C0_8DB}KWM~{>*Zgo4}~S) zB6Yb_>Jroz`&g@g>)GhPQ|dB7_)O6Ggkyp}XT&-FO0CdbgwR#WhcI|}e2;C>@QC#Hz9^+EQ0iYCoE~^ueDVuY_e%e? zl9=ZS?|tFrfxiB)N>&6a{jUULo|nX9yd-&FA`M@w9^sGnx-n3xeHQ409yDa|PJM#^ zgMN<(Cis8R@M>U-FErxqKv>_~?=^Z!T56jAv+PygwcgRCe+jUMyaj!Ewg0QY6W*H& zmj~whuj=$oV5$G~e%}XX`4{%<9(+k!@KxGtGzGVN?_HN*%;BJ49VXp>X z^{>gh39Yu*_&vDs$svym-v>wd_jbB5uwVPr_#N7QEoaIO?f+}r@jApK+!Slwv*cOQsjclcHQ?g+b8k~kK z4y1u5X+v7Jp}RCDl>TtqH1RK_jkjq7n~*>@Y?rn)OKFn*exGyi%pJ*2($@R?^pBrG z=brcToaa1m=Q-!zNr7?}`%|v3a2-9@-?+^GlIN~lR{Og=dEl8CzS+OmbKg2(M$Q$_ zc`ge-h_97U0>_Of*1a7P<2WS7tDY~dKj1&9c)sW}j^AebU-$g_g1h~1dcN_2-jQ(?77aje;x53-q;C#j6qWQjBf!ay{_-!Ue!YHcUHXM@ACfb&EJL&S{3_i ze~2uL zzaLm=d}Hy~{nXBX7{G~S-#>XPUat5_?|;7fOyHFF=-TH3=R7}ygXwX1deL_f|7ib% z>YOLDjA1_TAgv3W82XGr_{~7PY5JO<1s?Z?`vbuzyxXpC4L;@d_FopfU(OiMd6qS? zpV*=sgQwl(=x4l-EZls87-e8w8 z6*v`)xp-O#DukDNulI?ocLvV6{{(tuulMFHobU2xhCYNbm-c;sx$l|a>)uB?Uksk} zeg?gr5?jS*+;-z@LBsddhQABG>CLwP7!c9}-qSQ~G&i5~+<(=B>M7UoEgwPnKQ}P^ z(=Czav#zN{S2p{M>z6NU4*OnTc5U;wMPhspZ}$u|FZ5M#OAc_Z+uQt-E5GhQ^D{y- zoxX>?N1D5QPv7$H<{sZC`%W~U^G-+0!HvEnjaPXecmK@yLG<~a%N}d)_5FwN?;u;J9LKMRe88(wvPF4Wbqsr?I~`+YZt&Y(Ui+j82s zqNBOxDc{%J%Uax6uVBNe#y{S2Q%hIFmm3bY1g)IkU6Du52SI_)_-3y@(b6gXoOJOF zsMpoF;R)lc@9yh#3_gq745t0e`FE|Lw&stv=(Yu|=&u|8K@% z1G^_;SGI=z-@klC>q7spEPul2^uKr2+gk5wdUZ{vwadR|U7_{PhFx8cDcZ4X4a(T# zt#RqU$A4kZ_k^ zvfp^y_IHK%`X`O|h0g(!4}|*->i50=qmuLfOY7MN>b_SMttRsRv*E{mxm&o7dzXI&HMed#7e42CdDDX`?&s)n|Azp2)(6@A+?xY;<$54UO(9S>Y-?02kD(0pvJ?-yb z{w(X@uH|X}tt-FoKka`l@Fn$x|LxRV{*I0_k*ECMSp0nClxyF>KX{+0UyYn{ z|Kqi=R6S=Q@$Phgo|4@C2INvt)9lqhj&NUdC-yaiTYeJhbuZrd5!@b(E-VMnHzuQ$ z{N9c)AzX0dmbSD0v%YO@=lvV6-qCixarmlE6>oam)$eFK)p)4?ue>MSPp`?gz2tvk zu+;Xd{|?;My~jPi{Rx9B{%Bjj!5v4xK^?u<|KkR(>HC+zFZ{ayLErDT?e+gx7jv#b z{+s@-jTIlP<;{Q6mK2Ig3q^H#`nKX`Zh-4}r|bIVKWg&@KD6oewuOPI&|7UKgFBs* zz8`=RPWt}$qPF&T3;w$TzqevTdspBa&9}Gr1ZI}q(Y`SdZ9mxF8(6-09QprqMG;~1 zl4ASbz|O@d7{9vMerMo{j{k`IU%chh?eV~mc0SR561_q8HmnM~FMOx}4{v*}-DmU- z5Iu%&P8IPVGjm-#D!Pql9AxIggRir4;`>3AY=wrQf{sldlqWIN6Vp4oJ7M~{1C%X>S{1vYMfA8O95*pE6- z-S~lykH{*#6!?u>J|S%%>p16c^?nKV(%EZ&&DYgX#NN59VPMO*KpX3~|2P7v>-|E9 z;WMwMemQX6A9kEHp1$SF9UI;6xb9CoBKSblTL?Q52H~qPdu))gK{T z243%0E7kWAu2cVjaFc|665cNP!|I=q|8~hqNO(v^7I&+n+KljBDz^AE-hcW0qGu$0 z(f9!3XBs}NKDzit597Cb8GhII_Xr#OZy{XfZ!kWyq|Z-y`uuH1&(c2sV&h{=r$)LD1MBM3iz#j^;zuKX@)egffQ<0n@(1lo*Xv>~wAI1*ik_y-U!HhvuK zL)_olhxnn+gv1jPKaTj(&f|#x_s&NG4aWcKd{%OvMb5-k-$ndA2p1c#T-6Y4GyWOj zVk5t7nZ%bNKC`S3@lyyF8;#2oh%ZOD*!a-$JUD43oX8bwA#m45V`d_=-$CH$_04I$Q9CSjk12?>u&cx!~E z54SU%?qK-hc_$WdQkSB(9>&xmChx3C~FQV)Vo6$dYI$ zOYf5KVF_Q9FnX2bOZc#aFJ83?HGz88U&i>f#Lq~mmdhv-PD^-3LbXEjB|NjDk3C%d z4Z983|w1 z;Y!w2s~FxT;k1MgOL#`Y7bW~v^}KosZvYJ$BgUwaFjl!f=9+3a-tgUqo87m$huj}? z|D*eTjUQGM_WGM@>fBYrn4jbo-auzt;Yv_P=ZQz!!@jxq*Ce;|<0} z)dD|k81FB(;XTF6P_h92*+nQ_3=iiL_+FQx#tOWBa~*1}f=`w*<$Cx!*QpM?CwG~; zNnH*v>jJ!2xDfJ$Zw+3FUmA?!O|?!HQ&-{Lz-4$dZ8`kBE8y3?27cTw_-%1~p}IC< zAob$nMuc6Pd=iEvY?E+-gi9s7O2TU-TqR)-!tgq_eYw3Bc5S**N;gZmO~RcL?nbC< zc5NDwoL`afE`*zU$0eRdccLA>r@YhGM7W{2O55lXk4lZCkfN(8ViNEXDf)Jm- zM%a%P;IG2ttDSgT?{b9u(9WfXv1TsZ&0LD`9;|{(m9YjcyrH-Z;jaPzF1&S!?+fB> zLwpiPoyID-@LnK($q8=&;!84k^REZt?_q6meujJ8F7+hdesrn-j1_jNKfw4dbp~%a zy5Ir61>xU7XSu*7eF$I1s=M(1+zy1VW940Hy>UCj4R{j~&>BMs2aUZ5hmB!``;Gkw z6UG6Arg10eBk8&Z;W$2jc(=OSwGv_4wHjg8bv?qos|R7hwGLGDLDbBu520pO{f28J z!Us_^t3HOBS@m((CWN0r&7ArqYUb3VsF_p0g_=3_7;5I!Z@aEX_*vA04XkV4-27s5JoI2_Rm*tG-?hHgdRcgBxI4Td zoC+7hZ;w0_d7EMsR90x8A#3nU_LucY`7ifjZKlfeik#_{-rhkE{3h zfc^@gyCUA7Ea5Ke+tnxGH)%9pR`BZU5W67I}t9se;8iqx-9at`e@`e_hj2! zsMpyz(7p_RD;wX_z8Zf$_*>}uemm!;HgDZHI=W_bjoLhrOqB-XC9{x;^wdyxPy9%>nm1C2XN&n%+ALJFwkAeL`%}eyIzH8xju(s4``pYP z4!O_FWO4Z_BNdS%^hfDgoD;Y0LAPod%@@snRX(Muh zX|wpI(NR1!J}v~X)zS$tvIMootx0LTwaCZzayD^SkJ?>Mr{kC`qOpN&Ib#;A6eg8S z0mm%aXU3C5+4NLjE}b?LM7yJUDOX@>SE^XTGo8vFBAl7gQNdDr3T4^Sy0vO^GM6>C zuE+AK&6DVReB4TKDbpjsgIS7Y$8%OLQoGHg$eAD@X0~MI6EDu$t+jBuR?ldy>eT?Q zRd)c?TmhpwfI+G>i4Re+vvr7LQLX6QeoCK(hFYgaa+nkPXG{+>w>s$bhKsHf z`a&Vs;RdxYS3*2hGBX5Zz1rMYE|zkc1MxzpoF4>R$ggLVsA1zx+h*rOpXo=?opcjhE-pA%mmTK z6@q*Wj11K2FLn(aEfwNwU#e7&r-#a=L@vXM`O*G(N!K1Yn$HzYNhX;$T#ApWoq#@< zo!XTeQ<-8SS4bnmW|lljnZ?n5vy{t%ykZ#$h-}GBZp&qKrQWerI#rq)7#{}|7pX_t zvol`oEhHv$N7%5AT_go*p+*W*J5q;DMib=%A9v$#^VWm{d5!KU#PgG>gxX=2?C9`R z5%}${5qhzEhna;elv@2}F`+PFz-1b0hNwU~kU%5~Kl@7+U@d-0IGFbr6#F7{* zJvy4orb>{e)lAm!M>!S-K|Gz#9oe2MB+R7dYgNpZAw5LqsokcTELw3vAr{eENHEqm zGpTmxN~!Uw(cyAo0t}l@Pwg{-QuL+#j^=>BsY9d8NDRIv_Jz$D8&T3BKX6Txk3pPm}BOi;#2}Oy3L#@ zqobj*qFF3jb@#-}jOO)YJXI)`4#W?eAO|5?@Rsfq8flzy3$?NW0@nU)(kiM-vEj*- z)D>9D_+}r4{Q==mP#YH-9f4Le@e*TD64c#?5iJr$Bb2Q}Sv${3uXf%As8x4hAq;Di zJA(cMu^6wAn?kBDm&oO^z?79{X)JpfTG*z9K{GKK&*qTE>~|FSL`M>tup`^zXDY6$YX9wwZnLJbND+zay1PODSo2be{>42mz^v@_o4^hJ;`m$R?rtOeHiY z&`I(@DsSq1=ynod+AQgeq&Xfhr@>i{Jd2{F0T-2QR~8d!ABACIw;t^XNV=NLJ+a9OA0_L*P z7N?McYzaDL6;VNhf(9WB*s_$$+fhdj?hSv-+rQ>Bod&e{%3xul~of$T^T^VM+(HY)Ev5CA$TNXYTx&_jJ7 z^%4d|A(o!X*^1TJiHkD|qK~H`1fc*1gi0LzCL%@eN@zvQuPPOwBgw_8_XtCdUzPXd z%?TJrdB}cUdJ( znuId>dJ{%#@45;OL&&P@sKhC3OF`o4PPL#B%xHW`PmWwF&wSpD7i={u6{tCfvaxJJ zvy{`kSG~oWt*>HepU;U#Ru(XNoFeI2`qIG7-EUy(Sop&x^5fa5+Qvx`9xLv)^#@Ea z;5=59pblXQ6D64>5@Z7AZ7<|9Rt`)HY#KB8&NMvr`OpNeNj zq=#lZa2F8hz;L||mD2hJno|L$gsJw!W}6zwPC%x^94t_Tz|NMb2|Mh7rj`^{wt{St zr)59xHcQ=un2#EdC!sJ#>?kZ~iNgxtg^ovZvX$PJDwHNI<642P5-_rb@F@FWOBcDN zIc!P_qzM5B-B$#Uq%Gr_iU9bK3J$mhJZ!pDK^jSylqOo14VTAgewl?)QTiodI$MJD zp-oE6t4TYem5}6NRkqX6;7~*3l0{@&(FD03fJpv6a{{)5M8}|8bX_b{F7q}sn=5gI z1CwR}YiQfti1)_}hq91rva2W~!433X9 zV}0>#e+~+Pae_Sx^E*iv5;bAPD2rm*L0dGVY`kEabR{_R2C<&faP!ul(NQcl>apdK zNo@bruK1Xlh8Y5{1BjF*R57r{3g$iK6f7I^11!x_T^14H5E|TC3UX?B4wjM9*eLf` zsl?8BIwu(!w&8k%5Cs0U@l~J^#oN}c4&9U;t1m#Dq1{&W12Hr0BV+IsfYoXl^+Y8{~BVdMF zfd<|z?1X$Wx!JL%i2bmcErPIXS$6lZx=hl>1q-o78Ba~Xw4gyfzb&_sg;c)2P-9wJ zKmf;&N~}1)G1e_vPL$>s^yTtXg%tGug^DtH3hnB|ED6jpF^=AX*Gk0=kPwfIjj~)u zoDCwVYrY2|(>vnnvL;vvFP#AIav`e;9pPwT^)$@!!zOkzaJ=CepMcLtN5Svh@i3S4 z53N{&ov-DgidlkDih8r~U!STR#;Tl#vgUrnLHgLg!IIIrG6GEP+tHrDvixWcYiN67Cq^L0wBd>z%MgpO zQ9kMnTH>{oW>2dTw^w#68h6{^WjLfWv|xuI0)6Qm?LaXLI%1ad_e<0impOEETI0{bf5lmfZ;p7dv5~ zkJv`JJYkS(Y|6HVxelDFLmIcr#w^yACK{_%v8pVb!lgD9Pm45RIpq|eT5~d{C85@G zOk_}6g zN>S39W;`3i-lRLnL1Hj6gwvc^Rhm@snXud z5DW5JrvDE5xz7Lovgn+lowO**D)3Yd>0uiPtCd?Y7R}ud+SP?6q+wsYPyp%b z48YQl-Q?UnaVO{+M7xgd$dz(BHb#TpEa(J90A{TdpjY_rFv65hmngCIu$G5M@1-FJ zV7sBHev4hrw(L_&DR*0D1smXCKpJYZQT%wrY17QJ4D1izvvw6#eMU06R((6+9<1~3 zTPFiTu)E-X07If1y>lGKE(Dv0J(E*K?N-Kq9~K$5BBFc{BW_Fu$m{b@Lx^s*FK!l zd7Cutn-dW-swEEuQG#13%?nn!_~)wl7zNRfr1E-otQtf-yftt+p)C`njtjSDXR-o^ z2v1mwGQ8jbrRH>iYh5SIB$&&pLSZcK zEqYc*wWW1|(hE7iMtdjB?Vz1%U)0JqTCwENP`Y;Juq~H`d%Ng>u8JriQXe|N)Dd>F zDp4L0%lfp_nOR$E8%gtyX&nO%(`1HE5++)K{jp!k(;~>K36_G@n1`=^v^SL*%4+#X zk)1H9x3W0eg%63xnsy6F^Kvdf8J{q1(yCGiY#*yL@%w^%aomiZq8u>8WmR|H%=0^J zPOIYsM!2s4O*{$rfi;@8i>xJwUWsMzE*GXWF&(JoE0HrtI&a$N3kuysP?X} zFO9vHSr|TKGMD(R&(SXEkt5K+AfdEboD}I0E9$r|#$J6&r~3+J)Sw1{GcyC%f(-4@ zsiXSn11r9br<#RBL$GpLo#=%NAh`_)KaxsXIU_k*$JMN28T?R~f`JFeI2{{&K=xC( z3n&iLAdezTvsI55d$Y+{QM<9kS%V`kXaL*S02u&g5=gYggVj$QQX|~tCuB>@WUL4+ zF=?|f(JMkvBHC!G=F!U`2}@u}TvW>eHXFFu4GlGhvvhpstGd&dvy7cEG9}M)aY~x| zd2H{nt%f72uE`xZL%~S~@^ZODJnKnV*Dv6$$ubYbfLsz5sX?D*aOvQXiKi7#hIE7r z)0<6UQ)UsfCY`i>8ZFDW&m1ooQDc(FaXi_hF6X&_U1^dlZCBO&l*-By3)1_Xs#Rz6 zv;!%w4wS?n-VPY5vQTz1SxS@X0w6J8Q<070; zn}sQw7oZoIRgiItS1>g0VbNiWjexL_Sg>le+>4g8Q(0zeu{()MGBi%mBm&g}s^o#1 zBykjhQw&LR#VDQj;83w3Iom*GilnAs=Ii>^!-4x*wu=M2U}UaN;m@N`6%uhSqI7kkP+Fcfl5|@ zdd>2>0_Y+IsfoxOAx3jr@+=`HX&g+$@oBCy|u+P$7 zJB3YMT^g9FOVh@w)gFZ4vHVl$jTe>ZUf~e?v(P8I%?X`h?TyCLDJvsai}vGiKOr`R zy_r_f#yYo}12E>~XlsDSpn3=_Ybsy15_3qiA6up*v>H!uu_*ML5=_>rC(nyi94?i! z{g!W1CGE%r_!+m8bYJAfRIXgCW|&7|&Q()%MAIO|sBA`4&yMfJKEh59!zW@D0f#t& zD9MHbt?UhtId0uBqi(4QK+J^)DaBF&j!yQRa>UUUFe(T7H5wB*ph&Ik9L}=yG}hp> zI7(f>PLegRt5k;pRYW$h$wx1|UE9h9JtN9SuA4mN2n23l5Ur_mEKZVAeN-(`vI-W% zlmroD*{#_L$%z%K>#MI*(obSvtrUo2S#%(EYy7}v<%B_|g}9dLL)qPX`b5<@_+}1~ zT(kv%)J-#S9DyFm;(~!rZ{E6Y6lNbLjw?a(M2(_EI2YMx=xYl+`R1J!D`jtLiLj9z zMHFCxf@fkUY#TVr5sM|woObB(+8=lBxauHLEkPu@gXT9BvsEQCW)>v6tNzj;F1N4` z7|O|BxTtUe0hiL`@{^))pMw?IZdeyi=M*^vK7Av0CC>L=vyjt^QtX9?I%k_Ta0^Jb zXmBV1N#H^WOrgBu=6H-d9WxJAmxEg}uP=K_EiTdg%XN-jIgM1HKADvp?5=&VHY4bU8+ahj!BFT%cU>) zhH!PYz(YDH0g4MgCiH{-kQk5yxd>Ll83Pk^5ySNb`wxjBoFNuXM65Hz;w@{Ix}srvitBQ;8_z;SLVS94SkYc$y9tR#Z?IRWaFLxPDO%om_;c;tK}cYFQiW#i zOv`Bjyjw3E2*1kmmB96wQ%zOcvJRJ9X;h*N*9WLlopr4HinuC8)rKX}J>E*Zi;I?*==&E)*NYKqbmz|I9la&`vxh7DA(uHaaJ&KE+KGiRP#5II%0#aQv?|C*r(`%z4}U{mC>Eh`SHRSl%a)LR7~b1KLgglPK`~s!I0xN<=l*yX#7Z>eH*wWZhOb;#u;!oaQ(Gx4G47Cunl1jwoegmU%QT~jvzoBth6yQ)K z_u)o#&3p!;>}%tWOfs4yY1v1PoC{gv_5n39<)|upxq7*kh{4rz-X7s~L`?ytb;8LI zj$Mi4)*0JiIW*qYca^Mt$M^gh`v`%!3 z_PZTLeH$Ih2ae?J>G%XQvdMugmAZ8e05V97SZkRf9C^s7af>%DhD}N@GYJvTmlH^b z_zuI?8%9SKIP~Hv_ZJg%)ZP~Wo(Daku55nzJOPIX~1G~>`z)AC4wx| zh!b~~)#!YFtsS^fmPdWj*aFI>I%@`PmU5P9GLp0MQjmpup=A zvL1oZL}v4L5i4xxfxd81n$F3qS9j7_cFwJ4LhHA@nY30%M4ujGh!!aLlvlGf z6!PvY_&PCpz@$~L)6_H0bj@=N2Df3D^TuCaVJctB6?t1=7(5{r;n{%~D+d!}oScq9 z?JKxyV9MMkw+E$Se@^b=gD$*j_M#$2#0wIGDU{HgRzMaG5acv* z4E{SLAauc*ex_h%DuT_ouE)UUbldiq&#N zZ;zMAi0}+62tv3HOV;~Qgb>y?N@0h?>MdD2y!m%-Ac`#qx<=TWFs$9dK2lL*A_=0HZ#0g8J4GA{BAXpy*vTgaMm5O~bPJCEZ#e1b`g04j?X1{CI4T~MV6hU&mwj0&AlSX&}q*h*sjQT1U zuzzjC5f)lE1y@N6NJ>f%w0}uK(LG{der|`9fa=f+$zn$#g^&y#N8NPO!<5mFHB(@Wfq@%l1CENx= z0RK06DTTY2jMLdA@%c^mjyqRt=TEU2n=J5wLW4Wvy<8*IN0r|@2c z#O-$udXsmtdaP-We242P@# z@}|{&*uSc^wFCP(ZJjLibE^HKxe4gJgR?v^a$Uj7z@e~?C8RE-4bL*PBv*7}3}yLp za7pD;hY?!mOxSSYI7_IUYEZ*u_AsGf~#tsI1ii7}h+F0|c-t?2AwG znxyO;SwiPT$t!3L1=DfmZ~orFHk(WUDE_LhtjuP+Mv=OjAdz+j1)< zJBXTvt9Pe18CaWDxDCbN)Nb<8xfdU;Hg%JC-fNs&{)=ulTJ^aW&U=VfHfL>t>N4VKwyvZe4S z?m^jk&J$ldPpk6_T=BFk0Eqf)opu39xSk*^P^#d;C#>a<-9%<;Cv1O?)ry-uZ0f|R zwk=+u!0E@%c1p}GeJ2iI_kb-gc_1@dy?by~QS}xWZi|oMM;pQI)#1TfFu344oT|P{ z!Z$M17~DiA3?TSMc;isFvR+hzJ5Ya01$V5oyeTKIFVTLpuI6GmUIwsk*x>wOJeMfr z4PVIn60+lRG$ZCvmT3YME8=MMFbqwRLU!JsLJHRz%tAGLjfD{S4R9=*n^JlGk%<9) zET)AHzTHy56&Ks?8rFBW@U@Sm9n~**;%tbwlOSkOS$lcQDQK zoH_P!0?bYM2$Vk6lgcRSmji|il#!Vo?g`lUhhXqI8nc3x){+j`M<}9Uq=|uUK@NU961(J7rxFvy;}fFgwW|k@a4V zBa5bvT)VOJDBb>p;lP+J|eNW|~r1j&AI1IIHa_{g(K6jW+$Oxpii= zUA4Byw{rk>$&QQ0w-eADbyxX`7kvQ*WGQPr4A&VpJ(^dl32X~Ts|mP=;l-^b>sQ`d zM3Cwb6gh6X**j;e-}!X#i&}^QRviv>0tSWy8ZcserX%1~rmaIs9HQBJ75qtAgnif) zydBl3zQQ+<$s-$z8;%m&=?{6rj-u1z70FLo%r_J&&cN(FlDR?4>q-_Bfy z?+2=ZL1_+}=jG!ungiNjP1zag>94HVA!eQVk zhq3TVE1tL<1E}Mu&siqrcx{SA%|lVV!}eKan-WYE9pv8 zW~Wm7iH`zW<^@Z{2w~^QQM6%6S?0Y8X>tksV()q-qw?fxOrT~KkanYVDK?PEycE zsNoty&V^8~*4Ho6#p-PX`iZ%u5QVztmusc2-vgMYswA=pP;pM%0Sy_3#GC+Y@51c3 z^lBZk%$bbHEb*QPYI7{Ig%*Fk))J>6SxKC#%Oi7BE<7A#etLPm5)ruQB}s4cA7D4S(rdMb&sA4p}0os+svSeg{z?D z2V;~r#2n|Dk=mL;@S-vD(tzDqIf!}}S~rpym$@c+)XHAev}I%sU%F3Xl)8s{kkaH$ z4c^7bf|Q;SWu$qzCiLqkYKyh`(txy!!?)_fkeKcPim05NOHq?vlm;XS8%b=df#)QN z1oD@2K`#zvjSKXG)Z~|Odu>D_qyR)xG!rV4m^~twzYKWNb!-DkZVXYX;AMj z^fV09s$O%B2nAWIxU>%&fgxzkeuM|m=MLz&eW0}6$WfP5`cMVTq4~CYI*mfu8hzKG zrY$-(KkId)Tp``kC}oT@V~W(p84>GLB7$GlBjGGNC7(Erq-I7P4m;) z&lupo8CbGw?g5-!ffUvS`3r0LS{YVLuCz<+wZP2OveycS7t9r2ch~plUoom2|DqA>H&}in< z7Kawo$?5>CNioHphdnXcBt(z4FKVnr!;LJcy6j00ixtB@F9PxgyXH=`BQtSt(~D;Y zM2z>>(4)(|F6%>|R58Tl0gOOqs3%zN*haCJC;rGT!$Oc$y<~4fLV-=(N{<~E zs;R=xy2O!MS`&n1XJVK0yG75sDk_E{J~ZKQT#6*Ed_Y=Dw+lQJE!tp?0S1yM;Ze7c zsW^L%OvO$yOf^IXrQOQatcRUyrRss$Pz0kN!RX!9-8$z;;lQd;J&*>Iz#>@~BCl~f zW~;*e5Z3!Z{Ue~GA&Sk_6nFH9Xv(2dWUIMzqM>pGz4-BaD(cGlK#^1XD^)Y3H^@>uCuxG5z;y(1At#Spu zMKtLsXH+Al2gl*4TpP`ggo>sRPR*n(C6%UYibldl6-lv81w>qSBabN>C$!-?BcY=$ zcL0k6;5<#U^jMIK@oC-*)~}}@weDiAdodQ}67lxSwjl&Gi|5m+g5uR)5}FmP1)1c? zqpBpws_Ccn#3AEiW$hY;- z%@7~j+STHSqA??kPUP$5(xgD~sJ$82{#+QiMd#{9Aj_OswAZZ&8%Ab!>0Wzd|`SfYlcc0s~YS6bwhe@U{m^t+$mHg)fC2 z_ZGdt$RMyuq0IOmSCQpMa z5_2^w6`6@)0B=K6B-Oaa!0$md`i)5CCU;Y0dKSUVUIzQoX(Sd&xllDoXoEgaBiaXD zk&LS;=xPeNnp}-hSI8CgcwA^1iD5c;hTI-kD1^?Bxs?$LHMJUQsSFXW%=(opTp0{4 zMHIiDgeX(27Q_!Lg-{tnu`(OdWg$fI>q@#7LKGrv5Z$|i3_@%Z3^jO+V3#L?k%6U$ z00Dks*VPf8{*)1(ejHKx=hZnb7pGSCHQD7}JK}CaZH&N~xSG7IcFe9eQ?aVeRImc! znF`=@;er408$K>nlYwXMW2^hQNHelF0A}Vstho!n+hxP1M;0(1KoLrSH4J(h38WSQ zmp1TExPk(m6V|T0f?U$+QzVzlM*Os&l}6&Ss2j5(X`TwtJQJRIE;4f#@#au1Bt z9hrUrnaGJupAFBPC!W|3!D@{*lH&M(WurGT^VeR5^!f12OXz6&yxU_$77#rzgGPw* z%784+Yd$~`o_-Gh3&9PB*ly+xjKtbM3E_v4LQK#6Byzmbg1>cY<6&;~=yO2`y52GK8MdEvEORi)7FS&UY)r8^rI6 z0lwFQjbPaj7NaTT6)NV0q5+R5GJQ_c;6Dfi&=Er6+@+YAOV12_+mn!~`)o3;bXvq% z>1+l^PoG0uuJ$+WML)h8%Z)T4n?4I*jBpuo2p43A%lH*_Oy_tH=X57AiH9Ek_(m3N z!5X`~!OJ|2;ptZ~3lQJy7PgTBJt12|06;0*SWXVH>R~phLB?lu{vT+C>;yJRS)gAw zvrB_mIrNH38fL@^GXtg9Y)ryz4v>Z@3ahW~9=gxmB|dLj|U;W(ElkHvnxIuZu^P$UQCsAiWakikXcOHVo00(!H~9Sn*{|E zSpE2_8w*|bdo&jyo8+?eGLIVrylydVRnU=a?g6U7px_f1MZpc49?-BEOJGg!iAb!C zA`AZ@5p zZ15XP{H;cV(RzgnEnPx631y5$-`Nc2u7c|FXsU^^!tq(q3s~orPh)cWlxrbG8xTfP ztv-O{D?qSlD9Ept*qA#--1M|)VXVb5X1Ext0QG;O>HD?1c#CR~-i7pE3ySsd5-YMx zX+dQPuT-AM@u#&GN0M?C40XH_tw5fY)xM}3n0y8zj@UjJ zrc8n{VK2E07K;%{!KyGK$)z4(TBsT#OIQqmRcms%=lo(Vk??21`kZ_aO4>_eg2WC&nyl8&}8=mq{GCk#YSG(ya|WWJnFWs8KpBG)LtI;*i5B&aZEC5G%pu&5y1 zXnheo{6|?8uI!~jC<^lgB_L2hQ;1@?0z!Eps2b3OrW^i;C~$>OEVVVyj7V}2@`)8% zl1FANO@IiP*wq>$YAbso2c+N1-T+wJUSCdZKP3vKA21*@+207dn0~*H#w~@bH8A6JhPa+~E${>U` zZ7Rw(2<%BjK@C47<31nuXjN*DqnW+g1G+r%K)4JBLwC)HbJD~_PphX13m2^r?OHAVwcHmn9nglv0O&$G`*y%# z=R>%Fj+SsI$mDyqJ@^4-O|h51?T2y;f3vOiCOdwc_}>js?S~oR{(NVNC&|B zK^T$BrwBKRlV^&C|_TSXaApbBVRu!0bh$vC9rW_C;7{ z;$EolbI~Zw=Bo6Xd81wfL-j)3VnNPt@&qH5v%uX?FpICs|K}tX3R#)oj8wjP;i%>a z*r}DTYV2DP=}H#(9CN6iXFH7$_EFXYgN3+`NTPGJtwsclZwhKwEU~3)bc5@$t-PMf&#$?^8FxciDP5c6rNoz!gY4_5?Zm9SLrfYihzHR($*fMO<9(j!-fO@ z!8;KG@j|4XUvL2%PpD16I0h~a!Z{Ho#c?YM^D;7h7Ao-}Z0IO*+*oU|A7?kRM+jgM zg@49Xh*a*Q!kOiEWHtt?B}fB;)&l+yz&5IUUF3TZWaJ8IqDKi_3}OugF$yMpiYmah zfPy?Yf1l9I0rnHvnNIBqXvRQZ*JU1WXl?^g4a8H3(8CE7qH9J>naV>~dIFJ|)#w6M zg4#}~8wxB3#Uq$ovg9Vu6_J!CW%xQYiR&cUOk%WY=Kmw8CWDk$iFp!)zX>YNZc?Q> z@F-;pIW;nS4_lPQbn`CvG}{DYKSS8s(4MIg5C}yJ8LU2NV|Im;HfTF~wM?XuO}~Mr za4SNC`#It0$2jh+ZSTyUWb!2If?j7&!bl-g;twtqvGPu=Z$+wVmavcM2gnNd8!q}& z=tfzafA%?ff|>Jh~uX@v}{Z_2DM z>aM(K0?QI*cE2*Q|B6x<7zqEkzOIMNiV~6J5j9Qw*LK2LOp4|I@mheGZGulCLtLGMPOu7VGSJl2au{ z=9xVYp9%-Vz~NbXfo5M7rk#Bi)awmaS4K8UT$I;1?b$cb(km(&QQ0`iKAhqLCXC)X zV%cA#_Tr-d!Mz9XSa`#WC*9A!@z_?k|1Xzqb>qjs;k;4Pf5c#`do7X%GjORG3rbW8 z_}Ejz)A%YNtGolj^yzBpY34o6(&u0jEtht$ zq$O546J!fpq57){ZWk(lTVwy4-fiox*IbStB3YL1=xEdkfGH*P1dgN_4_Pwpj}sZmZ;4T{6pB zYZ%5Uy3Q$PjxadLAW3a8{eB5QB;lhHepbTYZ>0rYF(Z{!xRPm&RPK@N z=OuiBVda=~t38F&-$oWpGb#R_6t5;7xvJJ5xK-w$eQ>X!5cY%YK&hARtIiDUH2n&y zlB_rZvc_yH*$|OeY)oOJYJ@d}1P^q=KW-o@p90j#6Buxg06-T=7?p61m-a1s3`Ufe zV^DACRg@zb16uuMh;evH!ex1e!sURLr_#zN@dsdVwOAcljgK`~`vVcc9ZwkykY`)5 z|8)9g#DJJ-)DNG4Gt=1WZN_#MwLwon_I+%Qg^SEAZPgaX%u?N;6I=*w1gSgAZ7n#s z6H#QyfRc~Bp#@q9dm?o61Ob`pxk^!wZ45^4v9NfWEd@r2oCM9v=AD^n2{-XZU86%) z?FSoGkr~-JPrt0!@F$q;%bFg_g6I3H`8a(MnT1YKfyS1u2a|)2AGFkz1fk)+Rz(&x zT&rA+L>XMmU=4$t7~INWCxa0N2N@(A5rB>ven`ScCH$;}zc1nQ622hew-J(3S^s+s zE2}Z2SJJOYTH>G@mPI98Bc(5+-V#aQC*d)-0ioqJl$XLwU130ujkqp5fFGpZoy%4~ zP%E!@77f(%u)b^`Esw7s8{4pMeEsUR zc&xtRh8u5Ky>b0b>sPN|zkc2Lx*IpHU$YkHeL-~J)4hiODK%)QCEdFRMyfxFwhHgH z^IOVW4&Ttdp?fXh47FDa@qH71P=l}Ow6j&TS`wAo!-m?;?!b$v2%kyo`=Uf?&})oq3v_~kpWUJJuF2JpLMMg4Xb zes5iV!duUorr!@5<`KD_dSuS0Cfn)t|eJiRKqr;JZfCvG>VM(_)#*)3UopW_g|QN{oJ zkc9B^mg7BKto^j1CaY*CGdN!ezQlNl@YONA*d;?)-@H*JLzz_os>H{)zAy3UK7J1T zu*vTss&^XdPQB=a=MoR3RLD?1%+>mmle*hE#kv>3FZsxAh6>fcRIbz^LycE4%q6b< zs?H@JKVqonx?k#1>MldQUE^B6hG6@71#Ge7=7Yodaj}f` zg@uFs90_L0^58_*=#e@8|#st4llZ@JC^g&pE2QAYOADB2;&CiY9 zeNeuXTFvUtC&yIbT{TF5o$+WD$hydT9QBmKm#qr@=`??lMP-Wo$crhzyrY}^Yz2Cm zJLS6GE^PwrgANzKhN|zETPMZazw`20ZzulV2BT{Uw*B_MB@NgfsXK5zbQB?9Lm5{3 zPV*?9yVZ8wZ|1+J-GBR2I+*kya~Q`JbP2^1CG=n=<&U@^e94yo zmMb^H+Upp+MQqb=F|s`o9}+*%CNVi_p@j-eTwd zad~Y;y1vR$rtd0GVYd23JUzC;HCrEQ+2irPwSIG%uRS^8tbdmPceC+t4R*7&ws)W{ zUp}_pXh3-nE&}u2fBna?;P?>i=$q^M<+&O}bI0h$Wm8@?=D(c^P8ht3!&iiPZIpMJ z^SCxljOlk!)dljR>TwWlRILRJYZa;BI`rb~N3RU;aPzV%-^Bh<@XPDYykpNxv%G(Ax18UW@Eu;0xEVz?5HS3!A_B?fP!74EU*f?6c`!brb^8t7-s&iIU zt*E8=mxeNC!gJ8vBK9iYHG0pQn=>8HnZuBG5pbHLnhHDql4I3l({Grut+mqr#Gw4a z=L+t=8^LV;fLl8S1vA+y7n-&fVH8n^_b>762KRzsEDX;kxJtM|aIwnu#WNm`dS!tN zg^Pisf5=9`_;=C!V9zlt-l*(JaQpF2 zPW67na5MW0++%Rhz#Sc7X3xR(h%vJmxFooIxMDeEX7(1|zlQrw;XNbG>=4}3aDR^U zmLECF%=*LK3)f?`nGJy34)+_JDb~z9aM#0qN>haPurX#90XG5vq0jQm?PW7PQX0{cPxj(P3-j?!QPec zf<@+1m|!L9xko+!kWY#WUU=?xPbfs76~^8 zZdJZFejVPghdTy$3hr&V;DP`aGAn@fhZ_nv1ukQjH~m4ppMYzHdkZdfb^x0IH)A%% zbGCIhXMck`2REdUvr%vfh2FTucwY^-4sI*lVHF-$#90rxwQxt_ekk&$51!+F&YZ(p zDO|n6(Q`R#fIB?b8{c~#J z3}D|cg7n86a2a$AzK+M?y&euU0Gjf~?*KLdn-xw5HUnD}-U@614pewJaG(K416vKa z7jUov*9b2TLjLoplFI9Z_+VAuzkoX%um@=fcS1asJsr3UaEMCZ4PjvhO!b8ua5!*; z0n;MX)qrU&?qT# z*MLdr_cP!q;Qj_o{TX1u(I_*@fQd<>4VcDfkO3DXJ>gK)Pvc4XhX9AE_E7qv22A}M zX28_H;RZY!{nPOr#MxDRILeDf*%iPekUm0{|1@w6a94$w8gKyKGvG!dzMG0C`W$7z zG#{f4nA#U>z%)K%4ERUjIN(TC9;J^rU`n50z>R1#;T}l;IpS_o@jZcQ?lib@i0`G! zqwyMVz@#`O888W>WCJEWZ=wNX_}C-^HlhB>27CtbQw+E#@KghS9_gn6_g3wB0P%$T z0WZWm2^Yfsfv>_lEjB5@162C1z^Mk@3+1I5FzJ=)27E8@bOR=3D${_2fU^uZ7&zO2 zI|1kT;ameI`kGA8?)l(|qR}@Cx7p115T! zZNO2$g$7LYQDnde444!Y8sE8yAEfH1`sNuh<)3fB6u-cLr=kxF4R|B)A_MM%^otER z3V4YDQ~6gJ@H@cEfQP8|Q2Js6rt~%gCjKumV3HqY22Av7H()f6EjM6VA66JJ^{?E3 z>rsA%0aJM^4Ve13%7AJ990p9~RT?nOUzGvV{M8t+8`udvRP{d%_3M~qE%mn!@xu-C zRd2vFK5GoP9C#gYj7m@Z?lNF%-+BY4{2L6o8F-@sM*?p$;K9Jx7%&aCIcRZ{_B{OmW^Qm4Jl;vc+==qWsP>V*vCDvoes&u$jqhFqCV8{ZfT0XY z9Eb8IA&%rN#m57u1HZ4*Cje7hZc#W9xDM~@6&?rt65a>FU5otVf$3i(+L1O~-3CnZ;kW@)dG{DFm3P8`p9H=Sc%mvV3iy5lrt}XO@M7Qx z4Vd(ezZx*n!@~v~0sM#o4*`DEfL{lG40wvFzaQ}923!Sv%77OFKV`tFz)u_Sbl_)! zr>gR({m&UNweJN3Ci;2FfN4YivH??nUp3&5f&UIXO_e_s_zeT5{^EZ|MRG=G$SHt=(J*UKve z?qevw2-vCcIqYEO0MkF>uk!{>^Y^g<-va{wrvcM?`KbZZ`t})iGkSSW;4ch#D5@bm z7xj_6`6t|0!1Go81;F0`FHo4)Pr?g04b5 zxD>cM5A)SW@+i`Pss0`YOzVA51MULc%YbSAdK>U~;JyY-<@GaQ8jt=4O!PUx4@ViW z1H-Q4&PclyI2!RA)OgYS4>Dj{F9#bi=|@9=uU6^Z228Ro18ykdH>&t3;Nb@B0gf?X z>d#06rui9Vz*{gNvA}Ls-gd+j_5c%Yu28rEco^PEUmAn>MwPw?@K^(W05~3ai;Dld z0gu7^&2Wi406LzRK8YTa47d;Q1Ouk=o@l@WfhQR-&F^FbCiMu9o`xU+p@w8SffpZ}KfJ*-@aGe1Y{gH)^)+X$<(HhR^ zJV~%iGURE5K;yzF=&?T`B$VAPW4$RUFU~3aLSW%Vh+t7jk5dC#4wX;**j8Gz49P`6 zfGpD_+W^t~gog;u1$`J4Pcyrw>OY`RSj>)~UtJ(5{uV2F~uE(FsplfjB!pI}}fn zcIkWsA0dU7$J8I)Zo87um%3-16$#TMxU2H<7So> zodQ35P%->h2erW8Ft~+V*nz=OLdHtJ7=FJY8vGeUTHzlak`jP(vZ1Z;v!c(#Ux^B- zWM;CkL&J*kUOT)P@7E1yW;5F}A`1SKBU0dZiD`w8T<~9vNwLs-F?`p^R`^ehJP-f3 zk;Q>H(;TJ24;|eK|C-U~;eRnY%4%k7V~gRRjV%r`vm3^0@FU_{;V+3x36`b7e>bjG zzOznd_P6*b_*W-r@Ux;@;D;o#5PFY-zj9a#{Ltu>5DR-Pv6bG(vCcTH9ajuLBCZAg zk~kKMbG-2^)WVLBPr-ZFq!##D(XH?|CAA`aYf?%VSv&l%l8VFVU4y?Oxdr~W$*u6m zPB<@p7LMLch=Pwcgj?8C6EwW%PHd4Ot?<`RY(@BP_<`)!iRTgWEPTiz_<`)5iBS=h zHwAv+@+5#V~g@1Y~>yBL0THqrD{`zTA zk+L-S?@TL(FH)j<;JgaHg&j#r!8_&%{tqcF@cXBpho6}m)e~p5sT%wy_=VeIoK%B16 zYK5N_eO~%3nm8p2{){2T@IAB7!yizXGKi>}4K}k&g~jkIi!}HxMJ@2ZE@DH>EMrbF ze9#R1z`3pP>*lhdW)?6n1-@-w%P`QuJcc_7U(YLse{p{CaI66HTW~vJ&VrT^RyJvY zHWD`>;9J@23$#&Y_K$@v@P{ut4?ioK;l6=q5gTn`dlqSUzc^nTZDsE-B2iK_c=FWb zWy>7Zr8YKRMpm?1>S2k8I^YD3cHL#BMNOR?5wC_MU~BwR$X0- zRub$;f#R_|wx67=mx^9lW zvL?@7S`G{MN>*a4DqCAoR#%>0ZZBPh>{Y2XH4axnmBJX9`4x5LWlq~#n}a!QC3XjM zB2RT?y4~SmYbr|XDk_)tJrcIBC4xcm3=LZPi;=sN{l;&)Tmiw z)pg}|=PXPs=DSM0Rod32+p6RQV+gAqWz~q5gfz#7xvI;lT3(Hjti#~Zo2|04nysi< z58o-L2$WPKXN(ovDr+!Ag?7xa-D#t$)9Nc6W%V`fXD+|Kvc&FW4m47|R?3F?Xq8n~ zl$AN`Gi@#;tEj52t5{*Ht9CMU5dIqU3JPU+WxEBhZov+T}NdsQ9kEw$H3iY~O*R6FY=2jx_O zUQrbD(!w%d*^=ytF1dUf zEdBNrQJr%~!`RaWIj*ziudUmDHnvmRp-vw!XgqoMU;5vESLKVp)MY53&yVh3b|CHax_73IcDTC5l@Gl3y_$8wfoT=s>C*CW%HK8>D5kTo80}{5 z_Nd%D#*DdX`bSS4(Pj^LZcS=q#WP<$x_46_+vjf$efF2=y2{SPrnagIP?&$_FQVQU z(mnXvYu`Tf$yb9;_is(^{r;AR9*ue^wSxW8diweMPaFtOx7E~DtbuT?s&iJi?}U4B z)Z3eE6YqVc_qkAQ)SNfRe;nEH?2wo}%idpm-51Yo_~!S+(OpRV=mXPk1l*-jyT{%7 z)|A?7u3NY1&;PV`N$X@v`EdGYO|SiTcwqRL1NYs1Z}==?QHW8Jw6>b|*;}GE{rT$l z^}9CLXB>II@Kej37oKRH{h{^8rH)VQ68BFCy?cM~EN69%-C2jZ>7u5|MV#Mm5Zve7 zUq^lN?~VP&&HDMbjWaU;x%yuZhR%9!yOvUWmHWw4YkI_eQvX#zb;(NebbCqtiul<4 zj5(Q3Tcv$%wR6>|d3I+lM8cFciLpts@v(X>sdczuSyEqTuSH#5e6!^l;Ti2oh$;!c ze(t6{zed_V<*yz-7+3nztcM=?eDM=I!@8{aPsPm_YuvwqN2pjF%+Rt?;jlYL>p_XJ zaq+QZM<>L_Cyq;sk4+j`w%nGqymWjCm_8xSmOL)mmN+&(ZhUe=a$?+s_>%Dn38l$# zam#Ixx>YOcX?02;#A>VSAqGY-N7188tLq^Tl38_qT}^%6=v7!;*mPHwt+E0Oufqko zyUJcRv!cXlbGleHh@rA#y%dCyGZ>N4H4aE5a75kmYG)-&t#YN;)H5f_tf;gbnw=aw zA%4PGTvXND;fqU(O+Zo0Y5kj1n3|q3YI;W6+^kVF(1oda8S@JYXAnqCil;~X*kuKU z%d!eHQs-n8Qb0n7fN_2)68%#oc1STU&Ogt%c>j>`9RfOJ8s8yPl7FV84w;gSnb_f& zvDse18C!;>k?}V^Pd~}d4`i9)-yUn7G&lQbd`$4>ZQn%e#5Ov;2$Hr&rT)&Izk+Em zvt5g>t9btO>nVHwy6$Z4Qj0mSqSRSkTfMw4wq5e|g^w;`=W$G(S(F@hRaJ(&X!eWq zpIP-qB?)s!MTsgkYBrL!j$rSM`1R%FLBD1_bm8@#SI6J~Ns$X0PGxL51iwnzKm|sb zSV+^&lb_$yl6~){WNqu?AAF@!PPf(BV#zDA*JZ4$vsV$F*Q&g=l(z+U6dv7O+WX?* z{0DwMJ$Y_YS-LT=cTDb)DZ8@mPmewHS#Dh3)_*&ah9`{pUZwOV`U@q}BH8m|$Onf4 z?@v2?Z^qkk_mAzP7YAhoYo@B(O^LBjT~z+rnt2zVNxN@%m1+ObV-YHGP60YuS%bxq z8XTJm#%WiVQ`W`U(aO>%?|Ag4jK>cD-1V*Cb7?9ObOJ1UrFuu}DRnCjBi}w+Htx2# zjEDN#FD#v#_<%}X=w+VRBIL0-6t}5%-ZG!Y$ig1X`6y+>2VWK3J>awAg>QSds;mnt z9V%fH)sYg)PVRWw)BC1A+4nqM8hw7{?f^qVu=Z+|TDBi_&}l@!qt`v~V%CG7oqXfm z%>4YhSTM!&~l@X)S&@Adk{-!Dxu^NZUp`v1U!_m4b~wDMW-U5ig>412bpO1yZms_GRp#k; zrp2$^8G5z2OkQvQW#drU(dO&w-hbtn^haIuzd5$EpYt*q@~f+)!cbA_*U;F>Rn?Cb z{XYHfK1-hZ;FTx$T_$f4b|sQx?CnMc6)#P{@B3pv9m%})r<|CPyKgAx!l7AYuAK)yC>@MWpp4LeY`&yzG39e zxxG`bOZw@v8?Lv1cKPhI)xsQOiG}*>H|hsY_nLHc$6rzoUU;s=-Szatz7ncxt9^{1 zSGPWROU;3UowA;c`TEqPi5X{AVkz_>KA;V&(vPTN<#RV4nEl_x)JGQuz1ex~sqgd* z6}A;s*gTTNkct;}3HprabsgPVaq#DfQ_}7_yyU^Oq;y>XOgChe8jD|l9=-jkXJh)` zo^yCjLcgniJ@@WqY9!&N6dS27wV&0=uioIean4KAo0op@%B~~dCS0Zf=v}1{lzuhW z{=RTm{)yzAqv5Z=KQi>@U6;v-%|q#`IZj)tE@AX>O22>VGs|19ntr%;;y>@X{p?Sd z$vX$EJs(>OyHgf06I&D7ulO~>`NixF{TZ=j95*hS9(6Z*N+@>64KO z)9;zz`P!I%ucTfs8#TK~>Q#PqK0IK?ny%-E)aQf>L3%+~yvYFf0w{y@PZ#maKmwC#Z_{&3QmtDGSmJTbuKCj<} zH~;m8~$r!K=F z%Z9y?6ZYnJx%&=He#eu2pDqN@CqsQ#obY}NB=U(|uN z-+61#4?BN3obyD(kwmNcbbedb9LOr#x)xyzh#i36Kvu5Yp7ZUb#|m~#_;UZUy+35N z<;$~IRy$pJwwfAy88zOYUJ|pj*B|OsU2xy>w*&Hn>UEYzS7%k!bVz;t;U52em^rgye&|&o1 zdtuK@3qM}lKhNX&_TP=8y7x4u%vh)EaQ=PyDAf9T>5UUo9)J3w?3=Qi4;pjLvN^F8 z!UEZzvYrXKt;f+v7iZt}X5$BI-dp;+G0W_FSZ&DErt;_%zxc!9^V|=NnsJ9V`L>_` zed=bFC*NKdn_X8|6I)oPFM;~f``5Jvg9>_=r$7Ev&?8;8Oy!0g`PhfTG+FJaC&QFq zO}+Q_p0Ib#t$BBKoss8RJN_GEK6@Q)Ux|2~m2$oJ%Nw}b)c=#j@!3ztU2M$R9rmOl z@2obRS?|;OUmS1$)%{WGJx!kR{pXjQG^X}f==41IYL_bhIk8{HZ4W;_+deq+RYM+S zUD78=&++5+Q%ctLzd!X>x43E4Ti@%WO(R!ihkgb{)vp(y9txZ@p<^E~qJF~-w z8tN#jE?or`(l5h1YwwTvJTWJG-|6db$=&>yUkw@N+e@P#ygqQujn)nC zWnI7ZfvOM9gX`L7)+Rmhb;iaSJ9REt$TySFi^ue#XE}zv)e0rYO4+ZV) z^I>xKgU6b)mw$eyT;(Y!Aq%Njook=rvlHVVIvuk=>%I$V!3Y1``Had?XkV@rUBCVm zr#^2VKcz71;F$6I_PIlJMcR-)1G>7(q!VlU<6ph?$5)n=M;{c6D#g(oJ60ky<;-j| zCi;~y{KKYh&-aSTeYEWCmjU;M4ZA`KGb>h<*R8da?^nR**HquOb`RAywytR3XGp7s2gU2j=e9Ley+-`#j^!ebYG zS-qx~+So!#J$_?cz4@x=Z@h3mYgfY`pKNr!YPn1{fo`~CFB zUP~fgUjO1<9kP2BBEL#sKf1l~xkoN$Z5`G9y#a4T_ciYTN5}I&(eVeORxUr?;m({I5k1rrmj)+pjD?BZE#P!;&|3-cda}rTN0n z^A}$H)4xaUjSQJ`L4XqNKd39m9CM}A_0K$Y*ZwE(kG1OZT5o9kQgUlMtVR_dy_fUN z`i8v6`d@5}xDa`(U)$T~zap1yfA-mT?%w`T`jH>++;t-R2On==)?m_R3(607J zC;w2K)|~LeuwS2hn5jnimXCCYt)kMu=NFR`-dkAr;LKy6e3VkQzOr|ROiot~PS#+c zE_cPII#yI;B`WVw%4av8@yzR4QE=nhxx)%x820o3EG4~GH|OasfBX5vJtzHmFm>M# zr+;j|_xsuZGkZo=X?0o0WqRfE;^)3&TK>ME`!06Ac;5^Evy3ZF!O1zdKK#c+o|KkL z*Swf>Xp_E2Xd6T0a4Z-%c0xLt;FrUgOy=l4#%Da+H+mK79TRk_o@MQB7- zX+@1qSG@Gm*xcXp&YEjZrZ(LF(RKYq=12bdWMgm?MZa?3SLKekxBT?^*Zs2(*RH$t zSpK3pzN}K%dDqS9^)(LrI+ampzP`yjZCStWD>yYa_uTG_*0q<*C^a~57xirKZpeDG z^k4n*9=*A4*u!Tg=mrcWeZ2KSg_%>T&$ym(=#htatgU)4>&WCoFP#2!nJ)U;W$Z9X zdgci`e!0-NBs#5SLSV_^@7`Ezq)BXUwksNA@ulXjiZv&jk$5|TJNwq zJ8JDZCEQl<Y3d;I;p5vIL2yw@Rl z0gONnx!>`ln+IcSS9c4t&)9kP=g9i5&%|`dImcGJ%AdY#oA3Gip^a;^TP93%tgPQ! zc7;rS+Y7yK^L{&&Kl#zE`HlZD_+|NmhF`q|2%-Qxi+hOun^W`okN$r+jf3(ma!2vI&V09MZh3fJ=`mxLO2-v4Eu9v+;o`d=q#d{_B>vJ( zTtBs-*1_qEREI%$|9*D$nln36_ihNuDgJHT4aT}~hFR`62G<;`{O3jCI!aA9C zrQb8rL*@(X2*yp`YqH#gG+s|2gbP=&I(5QHU+*@ve9>y^HJE}9Bk%~#tFEe!O^2D; z5u0A&=%SyO$IimBp1m&2hv(MGLw}{wMyM{fZJuiNb<_|Ps|?@KDz(v;Db2*h&|WIh z>5R7jJyddO3NVNYU1ZV@5zcSN8?JJ-?Pq+7aNCZEHY@%0gi6Wq(;s~sl*>ocu@Tvq zYX|xjQwZA%-PwrEgQ?Vp1C|xKt;Z*r(+x|h-eD4|dPC>5K32SfW4iNOA48`?`n_T!o2BZ^VNM}L1)kqggZP8grrWN+0uKk9av0U4a&_Na}ZpA7t>`Z)_ZgR!b^;*f7GGwgD)w6v_N{5g#lMCPP7;|kj zxyH2*>1T4GG59$O;&`X9`bA%Da^bTKV-ehhJN@}qd;#B0;AbWDtU)3|UP9(#EoWM@ zur4-cLjja6pnj$WKTR+fUlE|j(1nmXJ!RppvAjFqdcW}GMsndf$wWh@Xn0yQ&J>Nm zil%49W-d1WU2Of6Z<`{vH8Zg-u@HBNx%MtbtGjWS(}fimiPg{rQcQu#g&!Lr36&yP zG@B&vRjUNr{ldD|8;KO1M3~5A!hMJ_rri=u<$r_nV`zp`1wIn!E@h#`J62by>1u(I z(FaU6pxWe$CNT=KP{TY@SV2H)P;J7B9~YqZ4HUS5k0#**0g0s-B+wf@ZJMw~_~Lr= zJfR)ro|}dCnsC1$8hVNb`dmsh9kbvUsXX+V9b?hjr6qKcJjUHQNL3HA$In#=S2$*m zyL;nf0#Li8%W#k#cSj>6S6HJd&14xu>q9T%H8c_9u8*E3tfRcm!A)_w5@-+7nju#R zWELVR1|JD=_ju$VK=~&K{CWpQf)llAr-W6*hcs&SFpDW@Cw*YT-P4d^s<7f$BZO-_ zCX~CUBP3c_F)ONeaJq^0G`ZS11=1jbY1>UM*(eL~qPUv+KGgH6-uL0E?=&=nJ>Mp2 zuj9@+_gq5ha-L^d=`$eJz@fs5*5YSlSU$eHF|(m!io|1BKIT}kVIo1|7&Z&>0`YP9 z9SKu4y7sh{K7UaIo=hwpZ6a<_lRidR!`WyPeQv2jMq0cfRDgFiMJW$k@WITO5Dbb8 z%(CFOE%Xcn1%!kgyJ5ljxeeT!m6D{d$QRmE!d)fYXN2c*-f+8U_)0YHM*EuQ(qQn0 zspxDZHA(UUil8wc-;f;Cn{HinVngI4u|W-a7`5TGdM_sHWCPme4Rb*x35smWPylaO zjAA8`^prhSW4J(A6Mb{Gihyi0MpF_@wy?%Bm%#V)`n+nOs(2q!NWDUORxv?1nec=T z#y38^p$4_}5mw9|=z%_l2w^4@(^{+<__SKMEch_pGYcPD;B&Z!daX(O8@|Ni4Oi>) zJh=lugWOP%h+|+xS_ZJ0m~OYR}KIx9KMQD2`sX?Dy3s7R~xeq0m-H zXVq;h2%sI`gJX5R4{=2i-|yp|Ox_6Ae@VEHVV;HOXVKVGG!==a|4Q!PCb_>~!#2tN zLmTeXIRKL;xt};-Xv5Q!wO6~*$h@qNOm9Is)$Db)fJ~B1`1zSY;@F97;y@zwFt(6L z8-!kO#r#zXd?zeBDrytKp(Hw4|DJi223<)P_<0q*MA;R+uxM2nEuK`Eu#Ta^@M8s( zPq-4nF(iN(56&Q&gfY`cF@gvf-{L;sBs>b*b8Fq68@;aeCFT&_EG~Q@Nk#2{{ijP?Z$tjlA@N7^g`W}ZEF}Bes zks;T;5*eQx^2T0ZtqF>?mSd6Ujr~!Om$d}OqsW5Kg0)5yeH^TWA$YSF$rIG8$O$67 zGn*xlMz&FUdXMT%)`7(QI!$5e5+KF$Zl+QEj^# zv&tK1p>0xht}@|Q8}tSd7w34ZUTk7*5V4?)zcMis5<>TQBPa`T0CsIO5%#7KeKxC^-@ zJ>t7CnSokiZfuFw8u3*ZZ~Tj1dN}bGJk+Te3{_yxRed0Xp%@Ah_eB3l=oN3odi{MO z0Bz|if;+K^V(kzXMumaFyaY%IvCg*5tCXC5=z#JBRdQ5W8<(4aK8aQ}q{Ahq#u(6ati-+6s}JToAo_p)3Q zeov{J6=Q)fjG!Q>Wpaqg3Q?r!*X%My^jUUI_#5xI>Za$7>eL$7YNu;M45lqLd2wKkS^6}8aW(4Me` z-MEWu$GP?acaP!jmBM|Ka1W(UCN{nq>!o63LU=wL*a!v0;Lco`4uefN`Gyh zWGU9HQQkr#LtUU(l^Vf)y}^Yh7YJPir}kUGMA^}vb5wo*&4*F_@Or&^-|lGyRdy??haxVkm%FFUclxUT|7G_iH%*&Qd8gBV z({#I~ZPVmFEH_P2o1fO2XgJNAUyB`1Y`gglWR`MaxXGX+Ef-e&7NQ~|Ard2r^EZEh zwCy-wYl@+8(gdWQ1>pf9r$oBu?hCt9L?~(3DyYar+eQUe(y|yQ@S~AB+d?Vrjo;g* zpJDW^*}9HaPV(0;PEQpgVnoB&qRApQhf40|&7o+L6fW3D_>{LXn_mo)(y+Og-s}Hw z(ohaZvu|~7CkUH;tMmUM2&EKko}f1ryB@jrju?p{ZB9e5wq00lFor1lBwYi$mTqcr zg0au(DYRo|&eu8b&!<1cM-G1p+H$ z1=7_`+O}e#Lt&=92D=#1xDB?biPZSf&2C+WLg0GEG}IB^yu-kT@z6(k^IkNpLRizu zVkTHOW0&H6Rbh#v>RrLSC)aig?e0i!4!{puQj1xy=6#E)(uvKt=#~1IZwys&9F=A$ z<{LhiLLNk=QrB-G+jVJyd-TWrDa`@6%DX-XX$$n7_MmK+y zPS4KGXGhVqXY;vudUkIFc8e{RpdE8&DjEi(%-YUn|8_=5m@`V<85y zJs*Iv_NMMnYnQIe%$4Rm#bTYIO_Xy_kbrL9&}Cc#wPp;p#$;$s5H-7x$<@|ADO97B z%6&U_zzXbIx%&<8PqSRoWiB*+#dmn!ncs&UwcMa zGbqXu2JncKc)hkP(jHnrj*>i%*@3#&wmpTo>4DiXh&^vK23DH8pCp3S#|***a?5M( zE;L~h3cTY<>YOy=1(a$Y6F6)D_RoPVB+5pcU{_Dxk89h6_6~QC;BHv(Hj~~Kg*_@s z-z{&V*&y11r0q%C?>2yQ_gLO|&f?zB-TN(#b9v+32ovZ0Dgk)_D@0>=(KJm&1!GBC zvB7((s|HaZYICU16J_2t+~MxqD#{J;g&_6`Cu*lLp7Mdyu6evNHZEcCrHCSMX&{55J z?(WOoY0~7pio5OH{j%_M;hx3Z^Of-2CmP~J!?nDzKr|i@oq^?TTqHI5*0pGkRL{$U(HwMc7UUh@`d0+Q2+<}%F!F7704MzXhOT7V=9%}9ja8xY_drhf=&o)GUFBy zD;6P4nQ3*Hq$KwQ;VBUfTSemoG&M=vg7gJ#hQ5kULhH6gLSA9lDYePz(3ttQK4@>7 zGFuqTuqje4$KF_-hv|cftkGo7)YoxHOfm28Fuh z9#Dw+w7{9SrNvT9M{LW|TM8xHyWUTscFjRcu?)$UPNkJ_8;N7tQZyivO}5Z4Z-eUD zY+;2`ZF1qK^huCNX|h^a@w=4*VdQc5o0vg1Xj>KP!q0ywA>vaorc&`&qe5NJmuvkt z4=R+KF_?vh_p&LX%LBN#YC>2A3WD2L!_5iCj zxRwY8!=$Xx`nErW59MWCyIr_PL~=R`(0=4ngl`w9bS5o~X!S%49p4d*kkuB$0nL1( z@pd*)DG89FO@>;8_PKC>JcyR19sN+kToc$+Z}~N3dy~tY97t`uHys&Rp@p?EP_D^f za1$bIa0(T-8_CFYJl+v>x(mgbEbI8XK*2Vw748gg^rMKz zj&C4Edt2}vLY4_@n-vU(BuPlJXM<&LzC#-AW?@b9RgXz(V~f~Sv~eeG7)nY0*e&!E z%W97z6KbCb{F=7jS__X9+7C=tzcUKCU_*h$QBCmxW5*IuBi}iis=uD>o7ldfXq7V2 z1Zx&ngfIq1R%d>w1M~0*ci%1hyE7eGUBW8QzJ@~=A#HAFDFPvQ!-kt^IY}%;X4s2y zcwtcs%K$D(g!8q+GkQ9juqy>w=3CIr1w@mx$wb zS|Bl5Dor)bG1bMi^Kebfl!SM8h_r~T6i@ciV^1SiQ?UZEWDt3B$Q5F_c(SV^cxWqS zA{cZ_6+(VbvFPo{gr18qRM)-{Hf9<`?Rkz<6$`IWg|`7?t`KWzfE*;WV!jB5KBTw8 zHySW08Om6q>VAwG^<5jP$aHysi;pB$G#GKxW+e-3VKLs)i&%j7NK9iD?)aV^*OuAd%h*4F`eTLKv zA%JO}#({@>ig2&P?VTU9sDRf{0Ialu48QwlVVlSU`#^YGNbv=&5DCQx8;rluY^iiz zzJ^pTw}9vJK;by<>JM9`PU#WG3pPAgnc`(7+iceXT*C5N2`>##-a#+6nG{ zgL@K1!)?L?<6#4DyeJw!=iC1j+y4{E-950S=AAGyP|Z4#ZPY>w7<#6L6+@t;+BE#= z0}CW>?!#g+1ZGrYCz1yZLYhaCu)vO+crJ{^!&*e5z($)qBuMdzYO!Gyh=(LP3$)@- z8bx$S3zcAychvpUcI}WBs?QbDcJGiDOI*jaqpWk)8ZG7z2O(o?3`UBb9YmMla9ghB z%n;ra^4vX})BoQro+R!`vUo0X&qYhaExh3t@8%AcL)O1LlpUOEb)sV?dDaxjVybl- z0qIF)tB1UEhYNR)t6OyubgAwZa~M=~9tD*M`ia!Rw0Ck5G8A(ob+C3fH+s;tV49?e zgVqQNQxgXMQYY?9>EvJABk(s#mjW}lntZ~O$j?{+Qp#DFw7--2OY^c%`!H$ zWAG>Q@E2q) zWY>;R14E@1OO50@IO%)1F~_f>gFolP}Ea*d@MCZIM|^9V|=1MOO2t!LUnK|i%l z14wd!=47oBo}6_d?vim}JGp!7!g~nq9-)21-K1l%P5G$JMzuj_>q|NcDp0dsK+OfK z;m|}_NVKN!W z-P^hQOYWJ54JFS1VVF9NcEJF_M%iJX8?#ntjdaBt{jNM~xN;g+fDSps>86VbL(A4I zpM`)mK`>cqChHtA%YrTOj1VG0?;LOtNVHD-{Av*#E4yY|%Z)KGu8Cj>JnA&K0@@?; zP#5t_lwbwnir_tX9Cv33&t}oEUo^fI$-9Q2X6;}Q5717StXd=ER@YUtDeM*ucrO$9 z5f`;OlPGOlDWz2}+JY;cAQUUky9_r7O6Xz|^tkS1TD5ZQH!$*av@{m?=%^8)d?k0I zrw4@F!QHLW?xfL@h>NW9Sdp6V3WUup43;X=x4Q`K(VRkR(m%#C>@3ea*)PoYDqB9#l;;<6|a(}`B?3|zKO&R)w_wr zPe60+Ys}9C@BGv`u-E4r^ma^;1-nE1%xsvzx|@v4zaVu*X6@&qNCf*f-|b_rG)u(4 zXnc3r$#DFi#N9iEXP;;&6OFD&9zhf3#;yRjvgD-~iz_LGf+F>K>P3u%HM8A3;ikP6 zS9l9dmoB=a07uq&C@a|#$1CMG@=mZ4wZV(svopyI2NF4Kz?XT~a9+pY(P|c;( zOEFY9sUlK#%8i1%1o^S^0ar!3XsgcMtErhJ-my0zW^;|6N5L=y@t!6~j1Z#@-m3!9 z&a)HQzn}~S@)F_h3JvJ3`IK!lO6y1EcQ?^hQ6d>sPIPI~UbeWjTUcQT4szOA0;iE( z5gU#XB(Fm0-ivSMltqMiWu(bqm_|1v0<=46qPto_>5{ah7qHlSh7JP6)wLK~II&5a zMH?%0gb9MGh;<9r^P#D274}xwPNh&C#k-Nots#Op#E3c?u7+K_;SJIFSJ4#1o0>&K zlV~pD&9{oJaV&fR4FH|7dCfTB734^8KNCa)9qWEsCui&xRU>KosM=MB(rf?=J|+WhMwErX7$sqTFVt$_d%=6#SKV%v)adDfq)=KU@ymO@p1ue{nQgt5cGjL2 zzk9x1d%{BZd`;K}(>>o!*o!hwD>la7%JS5)dWiA21N-`m{#G{oh`wZZ$6kr|LjHEg zmeXhlL5JXIMIi2&(4nQ81z28i;Yb0^ZP8UCy=w2GEMSbk1H{D!hXv8Y92Yx`Te)kPv(bv0l)hpiy0iMRT;e8mB_AVk;AYBy)H{ zV!rTn!^Z(3!{Wj7dj6fN`a+XZv0(VIyh zxInssT9q`8@fqW7#$cGIl#SkQ42HB)!8o6|Tp{RuZ{9GLH~hpKpW{t?MUwFRQ#9Nv z8mmQ9+U#O#>qWE`JIp|qPcot1Wjt&xtYiX>@eR%rBOB0VJm1w%bRcYDD9_>AU%2*z za1R&SVefp9yppWnlawMfsoaKo-DLADB#XD+_d#S!Ks1iR<%I$@B;Y(1j4e%DYN*UA z7*{*ng4+r~Ns)X3cXyFn;N5hv@vLxrgeNPrgzBf8yF-WvkRM~GxNufakoFQme=P|_ z%QTp4dN31|ZTzhf?3teGI?TssK_Z=d7DBaskXWnF`p&dyBsHf?dwa;1Uk4EGx#c(c z?7HQ5`5e2|nlZc-^>6J0vPq1wdD}=)+@*qO`VQ&d336hkm2{iFQuTI#Pjlu?& z7LygUdSOum`yg7b-BuXp9n_vtYIA#I(cm8-_soqne192B0vLw|+9(qJGHpK;IMX=!r7$w|~5U zZNvB!eL2lVudOT6=-Fj!c``kRZ2NB6vU0qDICdOG#aXnI)Jcjo2Mm59hK(i+R|w@8 zL*4Q2bx8|@j2);3T&_+S_4?Q-Tr|W-px%L@RYd-4fDe5Rv(uLoQNOQ!u@Yplb2-RD zt|3r6Lx`v%iFGG=hn7gWRalFC%m&U=l)Q{?*XcZn{STII;z5+sg`__Erx?*m+Q1Ad zR}Z0&$uQQGyv;+UWu#JDeaWy9lUHLgpz?yWiotdZ+hnkoR3WK47{#Dnsp`O+10b-y z>bI;Qj%&NQb`sxy@y);REswyoIg&T-6Ykfr@Jtbn&+sOzXxf8Xnm39qiDJulgFsE3 zKAP%G`y|i^=0d^vr8_Xh;I0gWVUL5!@vdQF zI-QOXfWRP$9xk*)_%4EL8a_7ktsAnvod_-z)_T%PEwxl_eLvqho-8ql2KrVj1C!4)v$J#0Z_eEv zmoBU9DX&40UcalXAoX_v=>VG2# zUjL$H`RR7`znB9--se<+^`FxE*V|i)_9VlI4h)3nP^`i6s4wym88%8h1*JMh<< z8>6|n{m<7r2ez00*Sh$&I`SK59Cy@{JH6Ou*`#3YvA0AwJu%{#Yu0^q-PLpY(D0Z-Jb8U_jsZF$KqTOHBu9{fjgU|W^{j5gOCf6lUx+a=!!pS|{~ zzJ*UsSpB^>PhN9T>)mF3n7;n~ivLLDw|lzPIk2tDzw?RHChVI0@Z7UMy5!qG>-^Ek zd+yx-j@7$$I(Nd;ohQxN?ajKaj_7s|{-Zf?!d&aU=YKS??Vf*SazNw!DM4PF-Jo0E z;a9WZ-e&ECxxX8JK+Zuq19JQJ%k6Ve|J;591|Hfk_t0KNGn0qTEIedJQ7YNLZ*tJU zLCFDq`t?0zQ2#*#`VQ_lJ2Ux}N#yp3Y&HiP8~-n21{k0JZT9Bv7ryp6 z&{+8|-d_G+`*QuF3D{QSzwP7yFPh_DEqB|h{I`$)zgp$`MPu{t_y7IAb^tc8(jSaE zZ0e-yRI+qzdPZfka{kmR8IlzhRZ|PgOH0ekrcO+ko>*R4QZ#j3c~RBWF=f@MS(VA^ zR8h{D(u$H~S#{OazPSUZ4y~$6mCh(hr*Pu!#}-VQ<_)=pRY5T8FzbEE=EAB>m(Dd| zl`5=seOPJlr@~6shn2N2sjiyl4GQZ&n5^;{r%laI&6quFYVPt{cghj+U?+zWSJ&F9`$eOw++D6gs>TBIxsa<>#de#OIA zybp8Xysku|?zb?17Z6StAI`*7Y5APg@Yyp`qf`@CD_nLHQ} zE2Bbg99~|UlznGc1`V&P|F29{ReLvzQbRWnQVhR8t$(j$eguStE7cPC-UR zw-`2uOW*yffr#u6O4EMuTbTEUD`0PU9XtqL4@W||I~v}A`51U3oD6S*C&8OxC6qhm;Vqbzhbv(n zycI5jx54Y7+}#Xs$9xN11@DD-!295x(B|i^6)|I1sLdhrq|6 zEo=Gg%T@JyS5vPWmY2$I75aHO{syUd`TMk=5KI4Flz;V9SN}Y7~U1x%3U{LnH%ZvAx=`zvmV1!FjOC z-J|&g-Nq*OBnt~u71hbI!qmi6MR{d4myI9t=d>-!7W{7@TXs8WE{tmS zXCxWb{ytjx+i208=)C=-#k+-zCq|2}iWZNFmP`qk+#4-<--RjJqx)@}36Td@DVzJa z-w!5&jQTdQx#NMPC^tA5H+_x#k{`BBgp4k%iu>_>cdw{0#6I-IhZFh{$R!^STj#^T zw}rSL54n3qg&~d#P62V6pL|fE#RG3$t}~1a3#mBh(MLN6qC?=ZD4zs)%bb?+zb> zdqdfGgg?Z*FMJ$oEcyf-51)j{3gb?rzaL{(pYaqt8$Jy+=6nWT37>@;d;S#O0pK9NG-Iw9s@D=1K)*zh3jBQn~=L5;h!-lWQHxA z{Vwo*%q`)1*vZ*gOxX0q=Kx4M|A7av?Yps}DZf>k1-?~r_2B9aQRmaXktG`=? zR^53C{WcmQ8+24&Z&zR29B4+&{n}NrONFh0*6f+XnH%F_UqLy2jzwZ&&b3UwsbfM(@kxdvUwC29(lqhq%$XLUVas3+L zZYDJQXB}ZCC%JswigEM@csCkt%OnhZS*aYYgdi@hY+two)YzaI)ZAuAW7Zmz=D}0U zT*dom^FBnjSQYoLx%00D)OclQsP&Cqvi==lWQt#ZTFo_^zhO4tTVb~fEw!ujZ#U;( z8yN4KcgL*0c@L;GsjoN+w#7UI?gh2B)*jA*d&A3M2Y5N$2im#+-o)z=Y`jdIVSZbA zc%_k{Z5ZuHCi=K{!G$fSkeQuTszOSy)Tb@w_d%ao@5$lX0A%47^y#jqN`YE)= z%U?yMa`tP=6)uADsQ#IHTjA^NtW@>1NyX)}ON#93GVZsgZNBcpvn6B=e<8d|AD(NQ zOY1^ghxXRV0BUHC#RJ>ess580j8py5I4s0AkS9>;HJLrsC-FpC3d*}k=^|vc# z)!%M#06Y+CZK^wLyk6S%MqS&0JNfCvmU%2od-H7>=k`VqapPT_Y!kJm@~1r|K43^> z;rdqM@OXhCUZ;Zy?)}hAx&=2rO z;r|UPUK?P0`1h>;oA#l_IJWg941E1jd1~$_wbA+aPv_r9(90mrQa;9<16#BRGRMQ# zun;P}Y1jtyX>bqd_fA$~Zj1R=xF>uDwu5S?y6-Kx7v{HNdl(UyyyeG` z{`glMDDJ+$vF)Joam4Q^pBB{AhVowXugS>xdFW;6Rp_yA2*T6M(c zQAi!NilWM{_npI-QSmqzN>*l|ouf}Obx?k+McXum*}T{lyVYo^h0c#UxHINOP&NAk zD0!#$Mz<0y#jN;T2-WT{f+x7^li?+pPlC(fnebA05xfju3@?Ya{dFU5UD5G1ioqtn zI5TV$XwBmD$1ZhLuodXl=%-ZKwyUpH4yZ^zul-Xe5)%gh=i0ye5-If^ULgw-Ngt+b z|4nVH(cq{uh-!D0%<<_gabYpd$f{+8xzLY0wK-YM@lCEab#F3iUB5TkEDUO{#V^Id z&$V82aZsP`)n&xtWgmw;ABiJpOqpoZvaktgQq;h5HegpTYg%^Dqbg9BO>>0*uQwZgDb9 zqai=0$e1;Odh;oa6%-3Uez>O5v4h5#w(f*TM5}fJ)7|f15H?W=UWToq;=YG7w{>g} zf5mnBs^HaZT)SgpjKL0AFHS|Y3Le;Wd|~QJ{dh%T$R8>BwJ5mtGvkXKuDwp9--vF# zBV!449=ZTsg1!*FU43(MK=R+OTNb%w?;T72KxES6yF2;6mGimL_-p-Ye2#Q@GrKRE z2b<&e2&npeBy7RnsBOOk4L4vfH>&ee`n{66`{4HaYx3iZ{!#g#>dpeJbT_Hr^XlJ} z|1buQCZAdRtF~M0(}t!?k1Z=mRkSkg|=}C10Tnh*sVZIMV$FkJa=?w!6at~VNPIXI1%gwH5P6Tr$b#Yge@?u z?(Yn>7qAPIOm7KGVJm3sUVN{wn7*PrSAE~n-Si!PPT5%fe4e`5Heqi0%KTCJe_s2i z91_RTnVIt62JPSa)p+}F725W{D^z>l4XXXOhAmi|wPldM+4kR?ydClt%ipg|L2o7^ zjg@~+%xwkb-=g=nDSwUgtY2Z^!;rWh?ZWHF9=*m*1L3al5UBC!p-^jDgJ26zqqjh! zY^g3xrXG}RuM6bb=PQ-JfBs{vY2?h+9d##bcZrEfSN{2_WOcDl{2yID!}bGOq2J^T z=tl0*{r(=E*OEW1BKW0|z^=he%lfA4o!weZ+}+G{WmWa4R9WiSnFaGJQpSyzoa1h) zle1=}iYD<`UD+)8qwuu$5_iLUDr~eTq$&$jWz}-0x!CwGzlIg$aBtWttXUe?ydBma z6|s04)z(A{Uv_?~pVA(KO@Elp%MRG*V=wh&8{1F)7;2yBDcB3DKROsbjkyo}37i6- zfutvR4yu3pDbyV4XK)#O9$pJ|zt(bpj`;@o0(=<02-mplKY+i${3v`G{saCJs@z_I zTGN$3E#R*(?+kwf?|^@Rcfvoy2jCmfw!@2v?ItUs-zec!#kjhlRI>L0a#zc;poGL@PU%hT?({{(|1bIGj5 zWScxI>-L#1m5uK4?)>va(_?L3&;Q!T2kP5;!|Rh$Jf51ao{x9tSs}IchHfMdbX{w^ zYUlCmbJB&?X$EWxU+IcpOP5tur)MS2`DL~Ji@$u^-vR%EaAKHQ9oFm<*31oSZVIBB zUqrR5qlFhnbv=S;@%hn`9it@=M;9!QmJW?BOh*?jjxK&Hx@>B6`N`4p`Oy^{qN{F= zuD&d~=Kko~KSnF=imtmly8c1@Rh%R{&Z0xK`50!)p$hv7b(E+-)8!Idpe}zZE z58#RLZ}3#O0cs5Ucc=_io6f)wG1tJ2@JeTY9sDO|$&QcVUC#b~_zC6*;J@K3&i*y{ zDdyk6aCiD>A{0T!X(pWAVKdBozyurycY>v`IV^)M;Mq{|s)IXYUIcf6E1dl;uqEb| za98+4Xa6+Z4f9W68~As)J8Vsb*#qiKn*2Qgw#D29?g>XY`!UXZv}28<&JpT9og-|A z`&G_-w=;j+@eRj6x$AGiy>Q>03aR^BLYZ4R<~xpn?Xe#T_lBdO-0KW>2h3?_u7LYs zJ_GItSHS(@_h2XZ0_+T5ga^P4Q2uCtNalY!cBB!=yf5qmnMWIU!<>1z;{wMs-Sx9! zSKMFk%r`spEsn1`{u*|}-D~hb_#4t#YRC#b_cG4BL>!+!7}I1c8* zGAMVI&RpeqrQ=obVBBerFL!I4`4Ptrj(>O8{{j2pzCE%@?mI%6_jN3AJRbJN{sbs@ z8awvGdt}x3 zJxTTKI**`z%L@$a%}cO5-`MRPjEuQE*8JWVN!KZ`>zADv9d!+6pl6|z=6Y8~Lp`)3 zkGdwfHuzSM!_cKOtwnRbxcxq1$8g`x+RGpLFV)RGhq!5YrxRwwus#X?75tmiX7v9@ zpXB;~mUyZsBrB_@jVdXhJ8dYv?VQxe^2+#Hj~^4%;fMV3_xgQW_5`x?0KZSGzOM=U z$@aPIemth(`cCzCHoVY;tz>9EIbA01kso;c$2% z^y6EMv}c|B*1qWGpCRPjdeB{geoa&};_3Irs$HD31%$aLUHBv>;if_9{MRop75OA2wkfHEfMv;fyHrPYzzFo%peS zYZW|7&sKPqOI&aEaV@BvZ_Z!qy$K9J72oxW?+*4J@6M0)+ix1*;mI;{H}%J!!H8d1 z7HAyLtAp5NotQdfwtb0!WQ3yA(5>R<$NTYX@#o9Bb7L`adlk2HNwkVWd8u{8_&w?^ zm6j)PUxa(jhtGBH6^80z+`Zze-dgwQ9OiWHQBVH1yGQA7+2Eek%$cb|UX6gY$#dnq zwER#!SK>!G*XB^til_V_+cyc<`=PM?{WHG&oJH?i2LGQfo8_oy#)bwug&>R{>!V|6PJMy0CV8GTnvw%xg) z^)Bo^e88{|VKXkbVQ=MHbRPa$xfW(SB#I?_W{0tPMrAV^s%*wUEC0tB`TqfS^25rh z#-Husl47IO56-q#ylJ!gdQN4e4 zT(hzybf@L4Y@LU_)HLT`5-MFYU|XoZ5Se4l)PKW{u#oFoqY^to+Kfv>U&7T4RBdw~ z&dhZs{(EpPb^mPIRM)MX2(xkqnVWrPXeNFsk7q&U5Az?BHpN9}2TsG>4xSEmhM*L# zf#vWQka<#ePO7;m^QFvhVI_PMRzb~8tD#1>v!Oqmcp&CEm|5Ql=EA;^Gk2MOa6Z(W zRq+@J7hoO*&x9wzv*4xhYP|wUQhMK#|zj1I0=JD`+I1^p~XThb=j$3+CMxDtCKX%cY+(y>b zrcqYPQExwiHjqZ=qOE&7Pw9bqceJgI*6sx6FE^m;_q%d=?rh&cB`g1QW<*lU`#p~P zzmL{gGOg#u`?tZZrgInj$q7ugeB4AmAc$)>YYw$63I-pYuO+Gv&TQJt2$ z)ZCNznR5|?xHg1w+hlYFn)koxeI&tZ^t0$U(4U~&Q&Ib%C!mYbXQ98&O0vd}k&0YG zY^%10;mF*HSSSyJt(3W=@xuDm`2HX30vWP6XbzRFEuhM6XIQ`gKg5*v2Dw93`QH>Pzpu*=KMt^Y)c9CpCTFn}k6BQC zE^;H&a4fMFdz+>(@OhyflGSLb)14nBP_nNSs&6cZ-C+eB49|ciuoBLPv*9^VeMXHl z*E(vQSJ&@`3*bxeJZSq4fBrWQ8Qlk6ias0(Zr5h^4{}&{If6 z_zHSGx>+I!Tf(5DovW&Ctwr1LLst5%inj~Z>jSa=HfKcC z4(@?H94A6uS2(g)IE=$GGvU2(F1!!k4(0AU@P5pXL%G*jl6}t1AKZ0d>Uk?hxr4RC zjB3X-LAEUqL;x)|b}}Dg)_-kJx&d3N|0aD^N7}-GuRwcH`FmMhWMaSRvvK1oy9%1T zDgSNI|69Kr@BgoG{XgsdrvGQX-}L`ioBrRQ`54`(tWo}sB|oQs1@hEomA~4l zSB$?BlgZOq05yg`9v%QsfGucmdTz@0Q4+-VCKNGSj77yxPLUTZqb~g@fYIqSF4jM1|_1CwJ zr?%hoLAE8lt_U)7$vpeavv28Ck*+skth$57U(pfPcZKcO^(IHwu7id7yC-4)+J~Lb z3tLB+MND4tHz%ELQEIh`p37&nmY1JD4CM7#!UUg-%DQULnhI#fT zI?Lv_#t>Rpuywfc@p%X2it>CPsPQ?&kBsfpN1DFf`(f*3$V!G)8q2UIX%xGv#t+t) zjI8RC^+V(1UClgU6)tUk3IkuyR2NrRF9O!0j2}Iq#`ry<Y_8xF^O z5X^ViN5X?KkAi*RLdaTHrVcWOLvHH59~#r=V&m6lE;VthH$P#_em!O$7i@hD&G=02 zD6*hLKTwC@uk!6ssQB{Epp5cH@nsJu7>v0$JPfXehr{ne=6o(by$Me-_wo7ZCgH2x zY@H05%UKoA^P})b;SYftX${T#dyMH9RBp;!ThBsvkF8Q4v&{Ww561X00?J--*Z7ik zKT{W2_cLWM2JY{!cZNq}J^&sA2f}eM3CBa5*9T+r>C(HSY^|~NO7Dxj+QhM8-=+Gr zl74Fq`X%*WWNdqMZ*)F-I(i=ZYV^J6SI}Fd;_|=Pd89h&74<7|I+?3{4r21ZDe}O} zzB=O>_1DQEc|C$~=K63X4Wk0BbJsF@npOpO-)K2i5x zSodCZ-W74#oagf7G2-AAEhMp$G4hc#aw->QoE!7g>}@b#(D|8-A(!sGF3GP1mPk2x(VeAwT?m zCT-a1J&@FqpxF7Ra#A3j8>H=+bXie;YNm->6Vn)~-wdmx%#Y|z zp7~ZDYdVsj+QYH!EzGu8$#k8ulj?+9-P_sB(b&s|%0J&{@qD4_vkrtzBZD4LGOj1= z>p0Q5FL36QVK1&vg$Kh6U?2D(>Azx`=Rz^WkdZqNzGI3T&e^2Xl%2OxmR=MexKR@k{|0yPIDaQp!3iL=xX$Z=m*iy zqt~IEwM15+x2vyz4ydj8{!R5u%5<#uXYhOaou48$R0reZzoyQE+u@P=RNvR-7?15a z92aEp2g3ZF53|Ak&+9n)0oq^p;{e7;*=QG*mzNZk+dUwK)r7d3b?C6>=O(U_Lu#is z9~z%SuHn5YO3EWpa_0xo%7r0DKFE(%XdCa)qyeK@A77y#sK=ZiKZKGjkHZ}JB-Awi zDR?A&8qS2zz%+aoo(7+Tr^BDZhv3iPBk*}BSz+gY`rd^-!_tOx!d9-^cOkV2YK>WL zHKuNkcEw}%z53ARN28~stGBm*a_8%>)c&WqwYX(2IbCDP`iQpJmu}zGgY5a=k@|*P z36JUwo6oquC{;OhR%#l0WKv%Uh@S^;$~f4!Hydu_>n#uSE=AMcp!&IAXWy+@YWmiO z^;dP7cOt2+Y*(=yQ2G1kKVNe8HL>g0Q~qrbI;Q+b6s4=j@x8~&bh5;K$#4EJ-cy6n z(L7ClWzf3c-{a*oUS#ESX}YMWBsDfUpLvqx^Y|~jmzW65+Gf~3GS4dU4G?P%gDHxq z{8Sy%`jw3bFW}*~lnChhek$BIsCzA2@#8C`RAzn-f0m2a?y>lt&i-%yTvz^iS{P<=hHtkOO-vT0 zXIHt00rifeK24hQs+_u@Z5Z`uAXScjKAPfLvni~YHrA$j_i9k^70c6D_I>4ls{H*} zO!H1D_QbR5pR|9yNX}U07Mc&h__qEmmU8Q_`}HQAXWM#lvXT$S&NuR50KPtjdp!qu zm-AEiDA@QtrK#%T@**o!in;a#?q{O!clSu9Xs#E(ry^Nh$kCpe<=88J8dJ689?kV$ zkKL!Wz4(1644pV;=&-R`S~7CO-#eOnwNl>o1eHDo#vTmz4DJQeD`>CUWi@U>i*-2N7nEL#E3cGs6cxnJ&h1-y>y zS32I}>~D4Ed*Jn4{|>wXz5s88FS_f$h4SxR$M@h(Twmu%yD`^4c4p=I&0OCR-U8X{ z306Y(ddz)V+m?Sr9NEhVZsoepA&bX4`{SHh9o=o%pA2t@=fG9)TzCBfDF3upC2Fne z4z6DfmG8GYd#zRJy4I@h!ru04`SfFYA8ii0E%Ny&QlWMwvz~#Ph&~eCo|UJ=%(V{e zE!njXy%TbGR;+p$d;PKQ@*221W;5b{|UNL>CSa*a|O^{N^f@jL>8>ao@9&ZF_d`qlXPpA&e$i)8GHQ02l|?2N_$ zCzv~AL_R}YQ~t5<|K_`M34Sb~ zxufp$Ze>3N^M&Z^(N)e5_4o3NDwQ20%w*Q6w{7}9tO@T!-=QsjM#IC}lXxA=1N!ae z0BiYe;}n|sVMHp_pQ|nAdqIj%8tx2FgOXg5iCPan9djQz7iwQ(9`t>P)~{v0+Hs|$ z`jGk9KMNPY=ir&p%GQ3!&}rECb>k!%QEJR(JQY^K8Nwwz^W7$xX=Lr@WY$yE^S8G_ zU03;UK(|Kw@^9|?aTBTSfBvU)K;`e}{~9Ant+FtGe@6S??-u2K>e|v9cxuxWX45KR;wtd~kA><9ORk_GMI{+QJ_ z=0N0E&n-O)qPlWmk_yIp+^b3pCi_x}|x{^|$4I+FFDS#(dP|IZtjJe>ys z<`$HvORAc_=HtVA-38Lg2L?IQl{jOw;q`6O8j}xif=R@t-zynHc$aN9ynb61-dY!) z=DJ=nuS?vt+3@;rRd^ZKZ?jyVRm>j~4{tWS0cNd4>nl2Ur2D+v&WzLK3HwZj`dyf; ztYp|%;2xneGP?b>&mUIBO&uU ztKx2pjN3!AZf*HC{vD2#aoaEJ)|O5EK6>2W3fzuhmtJyJa^B`uX!1?5(43`2KTvaV zt9$3cz2JO!Ae8Ly2^V0NbUzcaloFf;S@H?ahE|S`Amc}1qXN*Gg3}CjP2)9%CI6+m zqbrcZ%h7kEpGUuq=KZxn7xZZKbaWlMp;G&Axc)mV<|v=~vwN9u{}WRs<;kL+YeD5eQn#hJ`R!50X-FL!9Zk%97Ge)#)* zJ)X6NdffCq;@3?(P@Pb{w0RXWrm{-O@^yF-WjiRi)zqKS*xNYP?{BFr>?#S*bmLa{ zUI0~pmO}Z@S&Ufyu;+Rj)(7>`D=6!y(66Ignob+bMwG%F@Am)d-1Yhu6V9nn2KSug z%D;ebzs)MHKC!&=^i<`vapmPj<7Sssr*%j@zUkMLdf>+@Hmv%07sSUZ_wha+<;nf9 zGkhTXexC7+RX)3Ctv1qyv`_w=^t&W~W1;f@yz?LAbAsuZ8^7<+HrB@dGr(&9@;ZKP2HRJ2(?!+A z!;4eeyVTl#)WA(yd38amv|?PUu$VKZcE2I+M`1Qv))UFHE$(9yNL>E0_P#?7;qqFt z!^6zK!kS4@ZHK7#m(jvs>X?j?EB?%MTSX8x*24Tn9weqB=jApapYqE~(`9VW%DA=V z)UAWcq)G6d^VwDd!c0Q*)ZqGu?t-tQehIv$W9O27GdDevSgWc;bj?B4G`Qh_u zkc0&)K7M6?A<+>TX!5ARx9qnzk9@c*UAQi*OdROz6Wx5c4W8xM8u@73Vwla$xP0WC zsgaK_LW0(Jnq6OUw3!o1#_Ei#Z8u@I&8dIMF&V@h*!l5mI05_D;B@#Kcr|<-YQC;< z%+2ukm~Vl9fIotNgipHbPr)}Zzv;~H!aret555Uo5hm|D$?OW{Uu*a_W>tQfJHU4^ z^IT5wE<6Ih2bq%ue}=>1U!a{UKSmmlM?Z|-j}ZL)c!5c~%)6VX1iby3F?)>|ynVH? zZxwVgeTwgwYH?Ju71e;pX1>wx;-F`Kr0sr;9b4)> zFgjN}6>XoTR5~>#v2CS(46gpck4akLr_#yCl*}31-JtqdUcl$V+6VtSWYgS-YqkyO zd2Xvjr9*0e=U-2Ee`9^P{HSQn`&iI7qSv5bLa#?RN1}8@4?s^q7o+RY+tnA(0hO=s zi@l7GXW^faV~-rS?fZW}CtvTPsoKt_fZ70FE#{81KffU^HPJP0cMKJY`#ipM`-A>0U+!T*Fd{O%3H z-~66Pd+uA&hJ79Mv*>kb-a)PR5pP$YlLPVgf0lE%w`&(NPNzNW&LGNIsU2tu5c?+V z(M4^!FUpN7qMGqh&84<2_%YPmT$4hqXH}B0d(p|6u(!c?nSEGAE`8t0hQ#~s2dcgs)_%OA?kC>$VQ=NPnI&8Fypk<5_Ss!{Y9AW=N!76z zsh^9W+U0q$Cseys`&^7!a$*S_I3M#kcmY&Jx{9`dbxyPN7;3$36F*_rl% z;;Qmki?($u41Aqq`jmaQ(~Zu*o1A~Qz=2#>{tbdFG1GMfx58uLZEym-9qN3O+-2Y@ z%r)>1con=8UJdVp_dvdt;qots_>IKI=SzQ+KdqR-*4rKK?CSGHJ%O#KVYdG6h}~#& z7w^`=f91=)Q2BBn+#B8xRlgp9w*2(1`pq&-;$aHeShRdjk-|~ufo;YGBmmhht3^9w~<}+A=>zhahLA*_rf<_0(k z{vB3A-9HC@hMCf*=M6#VJBt#5&PY4FW=>ptrMZv8I2;E z*>!*A-_+oo&+OZ%-nHI?ei@yQE=K?VR?P^|ul22zFh{9uy;An;x6%{D-p8Q(cs4cb zR@Zk8y0kfdv_0@WHa&w?7|i3+g_Y%1Pi=NAN${0?rSC+buPMb74KPIMTx_IkMY<;}y z?Q=(zrmHvccj9cKS(?fnQ^un@wQd;8q;QiDz*yO=D z5|x}~UZxpO)1*}4Y<#j}QO)8&V zrYaVkK)w{z*IV+SDAhZskF)8WBX23cBl_j`=U<=RIm6lYnq8SXqAWF=_Y{@%&Y3WK zMoGHxnAH4&^3zjgN0iMj(H#6V`J1h~BiSx<^|W`+(5k9b>5P*32MwRZ6A~5mVf4)% zm^-*{AA;)F|Iq$lI4Hh{N?0y`Rj{$ zj#<9YJQ+XK7eweBH2Xr<+%wEDYlbzS|c?^|{62J94P#a~Ll_2Q-F|Aju$MBp3pNBy`T z@0yMkbG9<`o3U5o;*(stXy89>RI1wSqg7=e^KHt0mLGHI87(Qs)mgy~%X2fK%1wK^3Vh;=J`V)n=61R!f+e7tZ5-#O5qg6r4FXsu^L%{%U7= zXq)E7*JiJF=Mb)eYJb;e&mrUmjn!qjxtn_Y5_%oFSz9c=B1+}&&;MTN;`DATZnWma z%Y9t=$Ikz2iOkG?@{^?q-=?ew+B5qnMzw8&XranPa?a01wZ|`IS9a`g);bbvDMoY2 z#U-EjJfw>3ymA@Nm>ZaTyt{75Xx)v>%2sRhU0M4v%428hWl<=F-GqGwQEae_gLTXGcx&rg$d}!$+8w;%e&5e?KuZ4u zaA(N388VucssGv=eiw5G_4WjbcN4g?gsfzg;_6r4l+awehO_oi-}WDYx_4{I1xoMoax1e-!=;Q1N;Z4uT5*aQG5t$;@BC$?#=(in~4?{t|N% zz5=V@ub|4|Rj6|KHO#=*ppCD_5hr5fQ zV+rAmMxyx?Cv&aLH2wb2qM~g7-vqg7_e1FzC1cbERM%}d^?R8+VK*Hu^``4{--5$2 ztL}}2Z(|+>-+>Gnf_EX&4c>#cF4>W?UANJDH*LM&fE(2T)dwm4-ar|4+|wApF@IG4 zes8MUr8?WWU_J&Je>y_P*!eQaNsSlf)?fE)&0S)B zqCa1j>-x+1wTa2niewqP`LnVgpc^(jT~fqyfvJmMXud`qS`r6fo}Z`M1YurS6hxU1 zqMEm|by{-A=3V3C$O_)arsSUiHU8zhw;5Yc>(6Vo#eq$0Xwr={WS<@9==W^r#~i3W zaV}J!xBxOQ)Ayu}OjdhQyFMH9RCo@Y4Kq-^m98&^HJC4iweT9a5IzL!;KOhcTm$9) z2XHawN8$PKb$9_(dtM6v1}}uR9qJ5{z5z8IeJNMGY}fapjx=T~+m9xFsjO_Tcee<; zvE18u`$d!l1IU=M=pyty^meu798mlBKml4;arH?%e7E-{aY|T{#$`rK0(0Dba)x@n*cP5M$4cse@_NkmCPvY2nmve73?mYmv*T&-4 zs=>V_?%m5Oi^g=>mY(M!4CPs@FN}r|Mp)A^tQi*RE&Qj4HL0-XCsFNgJenWYz7^Hp z6D>SAT6k$#H!iAM9@S2W&f6#Ab=c=EwROVRMZTSBl$S{|{Fpk?`)F4ebq>iUT-Czl z*)rm@5v_Z?JC&pE9UH3`r*VVQyT$YR#Gyg@Y+Bp43!CxIG4=ag&zv7--Xt5cax9PE zw#|guwxs0rK}%ibp6$6BsyweT)cYCtHnK?l=WC?H)@}DvGwd|idLDbJ70!?Apz59a zWBGMGX354Ipb~x)?B%Yrt{dEpS@F09YJ6}j91L%R^8a?I-dO$(hpRB>!#kknc6Y)e zcl~sD7iP)lyP+DC?yH91#ylI|121*Y!`62iod>F2SYv7;ZBanS_6K~0W#hZM)*4a_#ujHO*S%V*8Kf;;Ez$Y>D z?SSCNa6Eh(PKG~$wvXD6*!Z!L&N)qLU_J~xeQR}}n7!VS)5DlGhU(znd1Lpplg55; zZ1;8JtbN&~?8I9pq&l%S(Utf4bPbL$=C17e_27L!Jy{P(W3tK+zb7KhsOEWSOrrF5!}tKQgl8k#mM_dB7d>j&yN@`S7jehOQ{pFxGp zdx*_@`hE`2!TbWOg)c&zhrx$>?v2 zYDPl+{4e7Yt@o3A^)fQ|ujA_bf49xY>9H+5>xrCdC_9zkrdOyL9MvYHg^Q!Q???`- zE~w4eaKgZcFZce;;v~j!idF$s3sL*(1dqqu8J+;O<}?|q&(!s^;YpZPN2b8N!o znd|DmPr>{uJQeOq0MjAgOEK3Eg-Ohc+YG4l;zjUccl|P$!hAWL37>&!_$)jP>YKhL z(ALROgyP%vBec?E8kp(Wve(x%a-BlRUVoH2t@m(s4di#jdaW@<1$FqsFHn!;<=>w8 zO8v~j{QZRTKY=m2xl~Y@h3-r6y; z+6HCd@;A(u4ckaM-(}Pvd2gHI@di}c{|RdS_Dwhdz6B*WO`imLZ%}3kdkldWK>ASt7;X=66WnVim=j9aDWon975Xp?bzovT-=6(KgZ= zH!Eo$YtgTugT2t-K&3Y9pT((g=~uh+>bKPM2PU|BuJu3rEjIf!433(z_p3VH1#SJU ze>P0zCz&sGCvr2F69lvC4N~Um@^;AVq{`!3tjR&OE=XiBDX?)hFF)x-#og?nI zb?1mBD{YyD+057hyFM=P^}N4YQTi*~4SoQv+^v7MY#H`8Z^LZaXkJ-|mioK%<3pH_ z`5$m3{3q1NMt#kA_z~t~;m0ruKY=sgzu-*xZ)p39ImrARbSG?mKcR8FzFSlOOsV9C z&9}zS+A2OL^Mq|fxgohS0hv*Z)}iSY=+)>~(BEXG_V4#%id;tI#4_X!>gjdIx%R)6 z-~TPZU+Y&$Nn5oe80~()jLg^k?^jUcmsg?c=dYpmXhXna6E+RuI`;gzm;PFuMU&;I!<}sLm2#lNs`vCgZO98WNybAiIm;X8e}Lr zru!SpCDqlA)YH8GQe9Q~e_sDjo+X|+a@+U+Ugju2q`n;+blyyuulX?D{%@1Nw>UVe zj57B}3yY(Lt9az+#Axvh)j6N$d7%y8uCm$R)Q`mZ6rs7q=Plf^{4Ia;kxsVZnupe{ zwC2J1z|1eXUURMNh=Xr;yz|1Sjuz%G^RC2eJ`Q<45*i%zH-m$wj=NQ3ZFx36HdsRc zspy;!C3`P`c5I-%Gy5IeA(WLZpDhD#w!Y^LpLZgv@FrS)>y z-P!B@<(LnKSHMBe{&09DX2ts|cm}*0R>EuGjqqBiHo5{zcBxIj53j@gu``Dx>Uzu( zya8%$NA3=XH)76%H$koO+ziif*XKaK$C{Z7Z-uwP+hF{gez#-Rn$;@EdpLqSAc8Hp z6Y?I8;4Y}WABCqyjc;S#9o_?n!tcORcl``_FXl>kAG`zJ5ATEzz`NjTcsKkmv@)q1 zWz&_Edby-r_44Nk^V_ZkSDQ85JvkM-C+{JXe3ELXli(;TuTC?+t@|3|UKZATD(k?P znCo^u`P%Hdu=mUQF$MP*#{9X>+^=h14r&fqg0}4}bgSH(uKzwr`pDMc`%q(R<)79) zWNzyyvB|e`&36GFfi^#E`g?HZt(SSv$#;$H_47{KuEM~#H-+KFul!mR-2NFkor9YK z9F?H!&{w1HML&gp9Zg1jEtTZIpQk+GQcxXB340xhpGS+X@enl}i$F@)-q z4ZHpwI~q?;M@t>WcVtx7L!i>F`lRbaF}HxjU~f1aGQ|z@jlK5eI$%;FbiVT(^pmDO zsqa$%EkC97yFK+F?`u>Sln=fyE>a>;Ip(kZa~S=Q_C-t@x54<|`qlXOe`PZ}{=W`t z{C_=EA9MrM`2R*|$Nzmz{%e0{b7QIk%AojbR1P+`|NsAOto$Woz2e+LVjK-?Tafe%CeN_M6^6lkmGin?DZLIv`*}RJOf7tMCQ~slgxAm*> z?|=M>zE|@2O(5=-tNSSbOY>d% zYyE$?`?xC4an2Z8Ics()&qU+6Df1EE@4V&$lYH>%e!{)ohr5;ij{LQ02(xL6%bi1a z)^m|%W*@o$w>I3+y&-`25MZaeD>V?eyTHLvqvyk*WZB{H0GJ1DUG-~J!y4_QG@gA$ zb(Nt-dvtH~e?v7RP+$H_Tm-bf;#E)Ne{tHCznO~=L0}Wsfy{h3 zIycH}B(V5=SaWEpeir6$FXHitkB6Q^9G$EhT3J|JKDWGd1}?UCpY>?>4rHC3lNx1V z{&EH(@&4w*9$Hp3ri#;vJi2ajhC7;&7iRAus_mq$1d|uzU3|JT&y$*LVg4ROd=6on zW}@0KFB-;&mjLLdCdA1;3s!SPR5Op0e2lSuJ?WxKgL>5Em44?Er;B}@csN8`^abUg zsW4`)(3>+@~+`Joi zoJHI*xw#2OYmB#O5F-zW!gW9{7eGVLtxf47VPJ|QS zBzPQ@9G(d6d|o-?*EaIZZ@bQL4s)_i*A#Ts%8B|jC_#=|VbtT4-AK2%&JyLfL_Mt#;9a4f8XIzdzoPk?jaXXA7uSNuBA ze#B3EZ`yCMan!q=ZF>!~ZNES6)n23);HTnvCRBYt3o2jEhHc?FP-BZ4sIE_O)p}qp z=8kYN?Cb0Y!X=mwf#<`)@B(-kTng1T<&W}NRNCayb~x``}OD{qPyM z20jOE86QJA>Y1XY=pM9~F2vT?!{O$)ZBK_}+tU!vZ+4^CuqOu#_CsLe#|WU-xxccBDHSyT?^~S6wYf7aW%jG9FX2mtUB1k)WHqhq(DFFYtZY^&8S#|&=b&Sp|`8XbD$a4{w&5T&dJYWPWPZ+Kka0f=dtHM zwe;uL{g&fi_jq@*mmF5Va4@>XRC~YrX_Xygne2LC>FjDA$Fm-D$@HV@&zdk^vE#|i z_rjVxtv`~hii3?;{nHb(bfNjdaCmG`%vo@Y1D-l<}ZC` z;x2xfHpe-~<7OvIc>E`OzR}l#Rqj6T){p1t8nR{WpUd>;apKqN-w$ZVa`9_rvrA3A zXu`9Z=FCmFSD5)UtT`~6V8=2(y(^s{85Bz|`H|4xkhxTltYpf|OrySjD!nSdA{^*G z@7AZ6{K}@6H)R!bMAgK-3G);CtjV4>&VIjg0vRK9zJ>YA{4`PS<4hUlr>Y8dL2+G$ zJqzTqZ|}SDE~2f~Mw?Ia7|z z@a39MAxL$$Fn<}pC31)lL322O!@7mlsUjP&$*!#p+plG;c45btp=jTUVLt5PymhR4 z>*uRpw%PU;X4`CBwz2bQYVAy zXsI*sLwSO@$k0Yim@ObZi77j(j487@Fb8|iy0|cHr%@l~z-*YxZ(Hx`*IQLRHSdu+ z7e5qchW{Lw3Tm=`PBwl>&QW&*xslR+&l21^bhD0};YH`63(zI#CFmQ`PoQ5zuSaiJ zU+o-FJM!x~buOx^mtOIVTjI!5Tph@-OwM&1z!P~{;3mk=s3n1D!7IMD zq-&;{$l{O!&#$J7?@-TkA(&SD3SoVZ1t<4ZXGs0DV0KHRU z2g&38!)W)YW_nmVC#=d)1##op#un9Y01=GAB^$-q|dWbT#yDNtj3+4qB|V%A!~bU4A;Pl8Fz1#kw` zT)Pl1hbeduoC&`J`F4wW#v~0f8u_C>K+4LtGtF;1PaVp;nX*N@loR7p^3KVA)?KK_=@!C0B)++)kMCBn+Yq#-hyjpfvNlMSW*N@F5N2F(d`SxbU z0eVmPWnt~eu#Q)SKNZ#771cf*)&3)@YacC|6fOG5pW)*yS?vYHRblzFGxwSd+VqS+ zqk+Vc3;U@Zy#VD2>%9$!3}UY+z9jGKjA1Se~*D5VIB)VhNr?$;4~QR=w+tfIj-joOBkmBV=-JBL!Y zCQLtviHFJfJ@I}#%o)il_x>8a4VGzs)6UTNbmqB!zl%I_>U)IwaXd`rsYz!+Io}UR z>m~JDJ8$!4y4r<5$OjG|B>eqHxVkewl`5*TFYJ+%CWLFsFgj_|^-%4#OC9LSS--ze zxF`B>ZIB}?%k@2o9ojrdJoTMex%X~lzYhBW*q_b)_qco8xiRUe*f`d&MN4Ki;T;%e zUdM^$;;^P+$m(RzbnNpzqsaFq?o^wXJd>of98%i-MJN4e~=IVV~u~o>(6=UsDYd4`#zo&ihY=&3MeHV`5>iA?%&Wd{eaJY}i9f?fU7~rTYq# zZZG$EN1{=qV_`o+*vI>@N2be)lyI(Z@i`>wP=mRAcAdk|A6kb&hPG+q;Mc6zxj3|q z#ewm0;yNFPJRb=?1Jrk*9s+8Lj8Z?_1#M+|n3aplW2Rz84do2m@Swu<$#QGua^r4? z;kI`$IP2ER)yCZp$8A4y(8s~b!^Yj_9&jRNmB}Qi{5c+Keslt~V}}DV z`LTn}Obj(^7Yb8rNmj;$S^2aN_7hBn<{g#zp`Y`i#yJ|V>~YEE_md=V~% zFTo4p8&LPZ4KKp{4!jt4B>|VfZg3g2d6L6bpC@`|LOJHmdCXn3kD!!#yCLRx{ak4w zZnS4=-v_ekyF+H0d;J_o<3KAL>))LnA2VJ~oRr5`z<3^CiCKAk6;wH20~yMhH0Ho- zF?WLBg39ab;2?NC{A?OK5U1{3_37z}`Jik)P#moc4TFism3_zJGWYu?{8Suof$=!5 z#H={p3KhrOVLXnjFe{FCK*jMcI04=bzgQek*(8ou)`srQM4QI(JNT(M-Us9D<9^Jl zqYpr}kMBaYLDiM6@c%HY?tTvrf!~K?;6u>HG2VU}=A+)-)h!!G$pI^q!|Zw7xEy!{ zKNZIxK)S5p(QFt$%laXCW@T#Qb7I}QI(Y6gbK>dTH;8fm1avXF4!r{X1o}0!7OvW( z^Uww83iJ~6O7t4^E9mv;mO02@^bqu9bOm||dKLP=p_&n>Kl^&2i$G;8BKxuS{^2RE z54LZ8Iku!IKb5TJgH2V{!^+EMSEZ`z&jB}KTxa^n_&iXu%7z(gKg_7Otgd8@Smj&= zdqCB--mn_;L2x#de47K$fODa(Ym$z>jlMwL+Wa%wYjY?s^#8h2`TM==B9~Z}EVJqr z#vo4}>&kyC&*5u)W&Nt(k5u?-*HULNA6Ge7!sf6FN~TnsdHN93hFfuZNM*SJd%00P zkkaqwop_cWy!CvL7@4Zy<+dHO%7RQ`VbZ=Orv;jwh?N%;?+>dIedi_)_Y`+N=0tXkB|{ie=E z)b_3ap*e4_pyPe|;hd{e`Q|~*iI2#hvpa9Ia$pH%b?^UZc`1LkrBeC(dGK=QaSLU* zQ%TA{ugaDGxbiuv@%EtDlrOu-Mxl1Z&&YcW7ovZK);GB{rVKiUERAG-<=2DT5)T`8 z82C8ti8Jl@NU5!B^mrX@x;wlc9_Q>e|G5G4WOyS)gc;Vj>k3=;O7l(d3V1VI>8{@n zZ^66@u7poJ`=7&GF~0zBgResQ^AWrqehgQ^Pod%mT)$PIpJvRV=g51x5o`y}2-$g$ zV(#CwP?Y_xYuy9QC+t{77aHsPp6bLt4f@Nfc==bmo7==ZVJwh1tA#87*!pi%WxGG` z;p?1#|H|pEOcito!o0|b$vX$!wzFBklZ@()Te!;{^2!Q*@v}2)c=9@a zZ3Zten42!DE*@T-(%yyKs9wh16lR09j#MYNxb}l54cC5D=Q)4cmlLQ_&BmzqgQ#vt zp9g-;Z@o+VV%&PgIzeLN&Mx1{gNdoC*_D-?TExND=Di>989|GGKk$J<;+r^^NvMgE z$#}cZzX1!a@ye~g?(>~Y|4hE?+>HE)UrU#jr7GRw0j;@q!M}UaYMalvFm<2mWcNvMn@nPWP#9 zs6Uh{aekCR&1g9rn^^>_;eAm3&T7arMVaryIq;WoE_}sZ{|!X;W_H0(x!(=W$IRMv zumJXhXF~rjY@MMv3-jSn?)7f_voQ~W=fD~8Tv!O}An6KthRKb!pCfG#peGZm?*q>^ z>6LkR^94L_e`d^HD@WeG+Ss=Wx|sgd=e3oQAt%ACis$tOgikbr3!(DoqHKIdWX}SB zg1wbzVO9=mt!+J8>N4lYawxfQ1>6f>2|GjOMOSzgX2teu*b80@`$3-9GUL`2P%{p> z9}BO;JPuwD>4JhAU{%y)DXq-*qkaQr~m_eIM?G`61_@s5YTIQimcliQAT z=jjhHPr>{sOv1JBV)#R7_s2)1fd15IAEK|U%^4soZ|ZT|Je?h2Df8*r=i zDi5S2Q#W>Eyg&u$j?PC%-kpy93{bst@--`jp^1u!T8OzvcJ;OeL=? zzJmEpGQLtu#P{a7ve2GNPUKv{JC=PG{N@Hk}Y z;z5^g&IZZ&Hs9)0T;73_$L~V*jgkS974Kn|tXKy%_Wlc$oYnOS@O{k3!3{72KZK+) z_y@EyVkGTeyL54xS{yS^G_qoIYeh?_bF05b^-ksQ=VB&fF>9{t)mqB`zEQ6HHUHBZ zAQ%1FU*3&j+zt!|yxy9o(2N?%u!8 zTlZveo5MXN@OQB=cEB9J=QPZ6uklbv+$*dH3K3(J68W*jb_{{)!oAUeT@8HFxurm-$B!7 zuXyUBpgdi|lrU8}$Gn`hYOCiWeh#$3#X)k{s~-}Fn|&M78P7nR5@nV~nIA=Udq#_nQogfhpuF2Th-zk?S+l%Z&D)9Ey_(ln?7Xl?%Z0Da zuPfNK?vB>ytx=x)b5pOW!l2@Fug6vAeR}Qrp`lgdW)~I@)karUS|3`w`3t5yAHVb1 z^-Yn^a#CLu3?;qen0*!UUUmJRfPEGJ(mc0Tf;<1c`T-_helA8{>>1XaWZpC1mMc4w z{?ntHAFH@Xw>ekTEQpS3mU$~tdtLKdjTMznjgxiWz_!mY+qNYm^RbsYfbS;hXBVjK zkgRMDyPEGQasD3WVD1iky6f6!>w!5J_Jk^5-KTL`FU%^*-f)hyUjPrnd?w6=HLwq? zg}VPd$19=yxfb@t{#&p=Tmcoo8yz2la`zYRZDx+ArSZ?-6$^PoD3#n9$c zp{MHyYERbJ6`#FecPKfaId^-^z2V+a z>;L;eq8@aFwjRyET)zHJnWQe+c1atQdIM zBOpacM*ID*3Y^KkccU?t?xdf{j`Q^1he`Uw5}+OLeChWKgzED`Eonq`wb6M4jX!?< zv`?fEH5RE?Q;GMvl%a`te))*fROKvQ(Kf;?B{OhQ{MX?8bsXqE@3ymxKlQ0T{_c6t z(W#Omh2Y1gaW|#O3UgWMS9Idn3R5Kv*38nq2^X0fyhgaHo3FSyYJ4nN7{AYtk1KHd z3VNjObMF1vHSV6TvlW$>4kt9*_bacZo3L+T#$Vz5Fmrd9c{Qv#IIKA>s<|$z=_dbt zf3e)<`yRy0t5eALzO);nOUGi@Z=2d*e1aFYUWKNP$xDT`UO!NWCafG71l1QD2Csp6 z@Oy9w)PBWq_zaYscmd{Pei4p@Z#nz-;3&-N;AnU}2^a%UfJegS9$j)RZG z|Ht0>z*$+<`Tw~ijDTQ(prD|Gf`SOlo&STN+?hKgDE}E06df*eFU-jNWBw=@DhL#m zmbBVxX{)W4mKKzjmF_}nX-Vm>mTbB~tF7+h2K{K$U9I2yd(QVf_nC(~cSf{cwt3(? zpL@>t{QaKq`TLybJafS(zy+Y~XHKJUS&}n|y>|JYP1p5g2`RX_$!8-nzmWNa7{MW4 zTSQRe`7LfD1FM@6U%!JgSVWp6?bU$N_bmp?z>C2+cnK)|`4W(}Y|20#c}uZh0bUBO z0xtuvSN1}m72p@aTJY~diSNsb4}v0_o#1lZtqhh^o)Tz0R6{9Gf$PdR zm2x&2yPczb47-)XSmtM=c_Jsq$pDr2tWIUVH+Z~BbNUg_MMn_s9CUFev>cL++S{N9 zpbw3eKp(*M|Me=AfdSzhqCM|kr0qHI{P$?uwA*Ler|}O6q=T;K?s4hpKGUL3`fOg$ zZ(Qd_9hs~4Fm})w`an_!AXoY;m+lfA#01m*fB5-%mULSi6LqQN(WUFw)GRoS;kk`( znD6KAcj?w}hi;;-F%|0oR+}+m8Gh>tCt;jF8MAl};U#gu0{kxx@5ZB=;FzWFXbVr0 z5AzCeo2+9_kXOg{&MZFi$#Au(qfJIk89C*zY}#97r#pFIt-x}1KVBH456ob&KY^?B!;^$p{cLHW*r{hq6f!|G+` zI4U)cxW-YHAr2WktnNgN9%1b=e$Lc5W`Q!lmOgwCcp-KfkuCydpI|olHE<62&){4T z*?RN9cfk4JF`|!zKNehoy&t#`l;?_zKzXiM19Eq*w-~$-ycoO^yabf<97{kucE~P+ z8!IL-HY9U~us0&_MGxUw;ShaJW5V0L5wr~IfNp^vfS!Q!zXTLLECod~cz+K)8PEJc$lbF&m*1Js z1;0cc9sCQgCyMe>c2MKhnn*kM>7VywrJyucrJ}#TWm3HvG|C#D0BOM zXVC_s56$~4flT$E7f50o^?x=Ciua@aOFOr5Wq$s91oNm6;#v3sTE&r2eb*{QvW&l0EN_GGSEH!2VxVht|KmgUa=v*Q93g-KKWA z3qY>_k{43V)W+=zC5cDkaN%TbDA6%b^!HQ}c5A@jO9}GoI@>O6Sz+gtl9eE@qnC$pl@lpB#h`?FicwuFN|xL1E9>u>%hl5tt@1p zXdw1rn05}GrWSQ1Rw18cYOR@{${bbb%6C8aJx1n{kqw`YYokh{5)mrq z3O!q23(CB2IVj_80-OS_0IvjPUbhCU!`=oa!GBWspMfdtKL=NWe*jm3e+276IY%bp zOTY%~rQnrd9k?14U1Ow&7VtXo zW8n4Rt>6Z5Hz@Hx32wyx1Mmj$Rd5sd4!9Zo1GojWdp7+*YG6&hvCQ=ji`;0-^=NHZ~UD!2ZusJm>N6L6H8*?TzeErP=J1hcxGt=I30Rauh?JF3I~w@MMfx3rc@1VVu7+ zb&R1Eq{o=X#+jXbt+26Sb;><|knlSQFMC0Ef-fens zLI3iI120|r{iEIUh}>{b&V@M}--_JuhsdV6Ih(E{+8chC?%QQ-u=Nu03mn{IxQqMB zq+EA{GKcyiX#1K4o}i2maxTEiFJfeg6TL+GT)>w#j{Cs=xPJwl0ZRW?34Rs3^a>Av zH-Qg=p8~%QejhabAh-kj55S$^kHK$(zXl%yUjxP88{os(W&HXU$hyP(HYn$ggcQz6;9!*!MvBu7boT73A(V(H^(Au-(XFkbdFb%16%7 zUPf;i+^;S|#xnA`e(_6w-#3l3wxc z5hDY8`u?Z)tNqK|O3cSCn7>~q%>gKuNz=7|Id=s2DAKjhmkYYK9b2Z%ZD+9FBfy7u zOxqa>THUzV=!>)+(IT72^x1P6_m~eFbCSj}0u=X=ApM%rNw#ghld;!;r+{0)QQ*hG z(V*2;d2X~07pJRo7eeOu)kVkpjrY7fs0^xsdTXTq-TsgCb7Crt;O*}(Q5SEE_Qz z`@T=k*^%obn@8qs{sbTYrkT3AvFuOUd`JB94kHh;XDa52{n!h{=NIT9p|JzLaFDd-f_5b@+WYV^rp+C&Mz@-`L|Bq(x(VY{ir~QaI zPdXbl^trjq!)cj!){;r_a@76K)SQjQIX4vKY?_#}nN4fycifrNH#HyE2J*r9m-~g{ z(3mIrNI&{KnsXe-jG_!V=jQMMm5r&K8!pe;v@mD0j6;$i*Y7XWe8@b}nXTmKlrqiF zdpyS>b5*NDnaA5f?CXh0jt320 zVdiM2KPEw2?-5@g#^L`dt(y@V-$)alF$$auU;60<;3?P_f}_Bt;AoJoA@5Z1Dp34= z6g&<4F10@n=3##V90ST+_;gUljj`ZspoEjT@Hp&l??mRnXJVHnk>8xS$LV_l>A8DN*&s^ z6!Bae8;kp+xQi(z@A9(@6kVALir$GVhJ)u~KM|Y;N?nV)%+;o2UksiHeiA$%yixhv z!5P?}QTtE981`qu3NV)hD?xcaD)9{j^}l81ZmLTMPLLJ{xRTe>~bz%?3Lgg>~U}|cnvrY{3tjdTn{b)ZJo-Q9Twmi z+YV*r?dBBA19OVjZrqy#?zI8`9Rc?h0rw;0adTa%PpLcG7iE5KRBZA+@rZq>@r1jL zKRckOpjV)`p;2sc6+ug&R%kQy*J}Dua5oMlRS3bccpu}y!weXx*?WHeJCi7ET$%gu zuj~C!JM{jioqGS%H_ZJ{1*Y#F#2%^W=wagO2bp~7?>nf+9e>4ji5T9sk@|P@zj_Tl zFc3=t^-GAR9bzS^0RdH2FE2fqZ$KAiBY z!7pRK0K5-e0^SeG+~h0ZrJ%&ia@+Wqp7^WSZGS(^%kyr-MdUn6`~1Sveo&O~9NRm}W|Qb3k)xYm;X zXm_5(6`{=5NO4E#@87c*KG`cY{ZTy(E9;0~2eMw2XDed<2fy<3e?b{*-v*_>dIyx< zap`x)fPcVF_PsxX(l3d-toabRxt}2d)?v*7rQbOQls=sEo#u?W_-Fm=^~Jsw%mqIO z9t(aR6uvyG>4#nV`u^Y^Z~(X$JP!O%Q2fc>+d%BU0SAE*3UEA_1AYXQbBcpO+waL9 zn%vnOoa+`5(#>@*;W=lS>HCIo?j-GQpNooJo|g{c#@r#^7^o)TN1hqjGwqU=^#A=x z+v-@vbGkPS_qR1_FL#ZjN zI9Pi*a+A^4J*WOCcKa@6cwTSyKH}@Al;7##e6a5pOm^>(-v1L9~53Pr8 zfgXaMf%ZWkn%+r3`hPe76P*#`Pnh_P{^Y)Xj>V>0+z$Y~#mL;CoI@BWNWj`Y`&P5F^czl&^sBC=(BPHD~!zslM4 z#hlG8Ia?}hyuZbd^ryBSB7Q+7KQb>Avx568M3i-)^wCMsuHEI^r}lZTc(8Jd7#T`9 z>G?V&AZC@uQ4bEl-T+PlrN1cxuf#6>(Q0rJ*a*rwohDGu=`@3~=hOoJ0F-dDKhcU^ z_MFy${|dH&=DZI02lbaj1$1CP2J8e+1g`>50YjBWf z_cpAX+_NNp+XDV#>b5fAX2VLF;l51f%x}_P4W7uJ9yAU5a~f&?ZeAqMpTx8xBWKWq z+{>^VR_v-o1223ursg%zZMoX4$t3(PNWwUO@;pz%(`Wl_(w&VEp2QX8@p?(B9XDCa zNo_m|ZG+Awa`7u`x#PiL7#Urp%?Yi1_wCL+4dX_IZ98*rxR9$jZg_6ta;~^Ib=0^_qRzJlD_l>5BRc<_;po^`(0XZxAN#tvPYl|gFtByqGz{bmkMES zW%kDJ054SjT#z}|hI!x@z>C4VK+$&7p1`}YOFexNyav1n{EYHH3*L+UZ^18t#Npis zKCOJ2uicORC*W7W7r+O=0c2F-KOTG#ySy**HSk1m2RK^!W5J!+$ARAf-JbUq*uRNg z_P!qiSAyRH?*=8_d%Q1?Xn&NCR9t@} z^V0bt`}B}~PRPC{WdB6Ses;jV$^5qSwbN;+H+8Yweofw`k*D1@PhIcTKzlIuyy2OI zAIfcNWz2#Ljk^tR@3s(~eFd^@BmHeR(Zv^yZ=QQ214JwK4Y{Dmsz1m))Qm;ULygXg zyR1E!Kb!lVUINEp|5tD-_)G9ya33hM)%~F8tb}7;;r$Bx)!@H@{{@mSvsQQ&v}3~Q zxVk#1F~6;hTU?DgHEHdwfO!I90bblAfE@b=s2TZ0+bH8b5g-(>SbY40H*Adq`vN`;dlP$1JCR z7E^A){AG@w`>IPLwxXetO>o_cKdSwHng30LtRC?#2Tki3(9U?7_i-nhjQxVrrUfT@ zQTAjCy&`6oE)J_Fncs=ut6>Gr+z~8d_x^lu24_nv{5Y&0L_DV-!F>FSh7}w@J_IlF z65a~l{z|eR;PPSXIddGp&^QDo4#A5|=#}0o&YHV8Y(1u*8wT_7l7^FHE74jJm#&P)W?zg5>hXX^r>>G z%x%yE&=b&$&_SrrB*t4PADRgzp%2Ypo&+-W|H1kHgY*UaD&KqmFFG&!YU9d0|L@D$ zcj*IiLDAP^K^g!1nKSW~Mo$OvUC2!OD*o4_gExPuhe)FLM(W?)kMo2ElRY43PG|o2 zsaman83g=K|M4DfU>zWPcM{hINW!}?r|MoHYjIib8zawE*DaCA+RdKUQJlp%hUJ47 z8J4r*)1ccITgz{oZp7q45)-{>lpmPe`3|7;ho1u{f}aOvg&^yR^T0c>pAX&%&H=vw z&IRuQZGU+k{iXPDYl=zTuKOk3`_RQ_Kj8W(b>`+~Nhug6*#0-s97nUIW2PeS!}{OG zmAU=raE?#f|1qG*uMa5gzppvpSElX%yl&h7YsmWT54gN3&Iig!{kwDN9h$RYfgCQR z{!h)*`j_W_vziym;fQ%FW2;)4xeB07^rweC0F)=V2O#a$?KvFOv`!7A$#zq2K`_nG znUkZ~bFklzA7;ND@AQ4SQEKiZ3Z%`BU+#RDwoZDFB0amuaklN7-1Aj;_CxkAoFVPp zd-GJjRcl*Y+EejFN8+etDr4+e$ktcp@7q4jGxf8%aa#OJzi8zg(Gw6|_g#L1UlGwy zL79U}KY2X(EcTCp&w~v?*DH) z#`gcWgCfh%fudiZ2mA9q8!J!y-I~L=iyxCO{rwv9di&2HGm`s1V|uFpG1UJ78tD5~ z|2D47_5Z_&t$+GSQ~$i{k!r12@SSC5S-_+ zxpkLn{m)D#8&<9~mwm^QN&nLC;M`xrI{$L^MxweTF!!&TGoSBPG_-dl%$1TyJO7u* z2VUgFoDKgEbo2ks{I+RF}#K4!#Ec3i_(1b0&Ht z+mgX>N%zHhmYwrfu53?r$a#NzCM)Q#xuqkxLUmq^j)D5a=-E>NbXg>Dyv?~LDPFafO<*MKQw;^2?X2! zo0?vyD6ATEF8AeHZT}bW(T9dsdoOT?_WuB3B&_rA&VkXa{r2zf1a@s-+Ru-n!sRv% zIqP){_Fx#f*G<~)QMTWR%poHuYK_p$DJ0HMpu$+_KV>_faf z(;p0?kC1pWja84*AME?EPcX9kzy3$szuTXFZH&}`Gn}){9nFN))c-WOgv)*qj|*Dm%unIbp80WU%G_T}FwM(Ib8NOW z8HkT&&so~J^g*^f5kE~So9LOCpVF=?xc|-hwfV^G_gVawc^4cph7Km48uV~2bTjl2 z^g%UJ|86h7RWs>N*06KFI(MR97d3ohsJ*qJG1cY{e7%=?u<=Ix$ziY_e$AQBT5t0a zvh7Eno)V~}5UHkt`Am_K!|Gzp-+rP~D+4vFmQ9Ki|&tM92I%RBk z=a2SjTERW%&ynWUERs#1-w!()eRF9oF%dGJXqp0_C#{=ZT2j8ieM?7CM*G~S z(9U0+Tz6@@CkN8KgLHrI(tRJE`|KiaTTclc{|TV9 z|6$;Ea5(s0+rO>*%!@k=>Ig3?A#2BrO<;-`CL`?vL*x&5E2@tvmejRAx0|8(rq z{?7oV{f`Bu{f`5s{htZGoAz((JahY>KwMI`vq34_L{QrQIer@1+y9HS@qbHFn#+X0%sT2dkBl$24%2gO*@wy3gdgZ*_3lCN zBe;DHv}1Oh@y4Fp7)E|=okYytz7kZzXNUszYA_t{-?l4v40wT415gy2T*iI!v81ukJt}@yTDV)%Wm*A@cUpM z_&6y0txtfqoyt4k@|KVrryI;~dsbybXwUR=$|$*T?>XL%{m6SPWZ%i^PQ-IMCF|Mc zkeDBmHd*kV0!1Gr?R;TY4|@h&0PX>8UdLnOjz{)+CvyH_5O2te`)_d@3t3&s ze9lMW+T#7)5$mTs!rez-unT$-Iso-4f|L=Ur^# z;`|7>P~8`UVsBA<2e<^gj1dy7t^wuyL+imN@Olu1GWmHB+<^US;70Jf;0@sSz>kCf1bz~H4ZIPw0f^fU-}Z8zli7ZeGcxUa2F$OSke*vIGAA1 zek-^F`~p}9eh*B7FM=uXci>7emprTj<-(eJa3U!2$i3VR*b5bxsXKe+#=Ql+5`HVV z8vKOvKLa*m{~Rdc9|oJiXO;hRuo?Rw)t*ZkTCh(9O}bz!_7!Sx0M}rbyF>*4M%_hT zV*e7@27VcA2X`y~X|MzPbD;P;0Cs|JgI68reS8FUa~<}v;PoKiV>RhlfE)zhP_1^v zWQ^@&rqbTzeHgj>TiUYRJ0<;w)Q0pK!@M)}-5I$@#I7&SP~P!g9yfIjlG`7RU#p3O z^o#fD`^ASb?#?iNI47cU$cSY7q%ovm)9m`pRq`k1FeH5i;x$Ho7tu~<|An+w&G!2W z!S>&wG5eDy>}!}iOrQ#l%-+ZKzuS|KYh`>kP^vc4oa)ldFc(}aehDXGoIjZh?!Yc{ zLD8bCHN2cbk|dZ{_{DPHkd!_|=qUCU%(^~jc4Wi%iQDx>GR9b0WnO2`U>`^F5(8zO zT>;v5kp3pu&A8h#MNIjy8tvUIKQI?)95X@L$GZre3QGSVqxNj<=Yey;`QThI0nP(& z0q29af(yX(++Z0lwhhS`J%siC9cU#m}HnqPOq${D-t#8&~>$bM`8av;~GPt|I;$rR3ccT!-zos*MvbE3A`1Xvo_HuQ9L(4IX zNxg)762%fcr1>8`#@ctH2jX6=cFutr`x{!`HR|41^Yt8l#s9r3pK*EC9@F$Esl0B| zbZ%lp!uVG?MK%8$wOmcg-#^0oD`p)b{vT60KBx8au*&mZmFNBHzDD!2K=V8DY#Tm7 zgOPaNP&vlbUvZ9g->&u7U-P+Fu|fBt@28Qe#y@Q#cLI1|3KVdP?Wj4*xAD{c(0aYl9qd^VuPl4t0K>*jeq(`gMBrh zcdGmkY5gwN_Owy)LB)|Ozy4!v_{&wkw`={re5Q5puliN2xMqTNzf*CK>fvscTa(t` z?TSw-9#R~w`h2b8>kd`VhEK8aPf-2pukH3}#Y38pb;@6=`nO-p(WLUa^#mKwa4k=# z=I?iEzk9HzqxJrn%5kyEzsl)@=I36;rK(@=Xnt>1c{Vt?Dh^UTn6CNUuW}lq`P!!X za+Bukel5ou)%%$0-*$B$t$H%c>7UADJGvwKvu%{czS`cFYW?)p@WpCxaOrEmwpZK7 zAR>`?VycH#stcQoJ6X}jK* zXZhdJ@C&rQp4RrXUCWWse7wwNl*p?}+tE19*ISz2tK%(ylIBzV3MEuNJI7f2AdP?j zG1k6U_3n`7=aA~@tEzX`YJIpn8*bJ7Z`ATuY5WaZ-U(Wd{k2@Y^Jem~NBQq)KJQfd zKd9~Fkm_ycSnL0Ct&bNp{7%jHwJMLkTK>g~JnJ^;tkLv$YC5B}-@RS)$u~@lzai@H z-V?2TwB~QWmW%JS8Gq$ke!dZG?9;VePiuSY)P5_W?fE$^*Xx?!awMEZ zHQpf;E&qNk*J6!7rusTk{lB60`l{ypn`9-Kug~s_{Rq?PIaZ<3V+QO!GfWU#qysmQS)bj7t@^8_4 zUZDPGO|t%DTFxQbUo@#)@6_`2Rey&xKl^iSxV^4@xq8ufp4Rg1)p{PO`Iw{r?$q*K zuJP^GcplbrMl`?0+HN1ye7&yaeoWi_QZ4T|jqi6FZmG71k(z!~<6SV>=KE#!ce%#9 zMdh(Z^WUU;64i1?wZGV|_UYPR?9_7hb^590iD>0BetGJ6JQ=+POQ*_%GIaTcC1Vta?zc_5YTZ<4LWj zd$ry7*K*(P+W$AHex|hiw<`ZF^*>tUds6k~W!2Zcs#gayAsafO0M&ryu;mgS`lRZ^o{E;;oN#jr_-KkSs30Su7j8p-|oi zTk?U{Nxl~AnIe)eZ&$?fP5yF-lPAG5iPk=hpE1Ilk(WoS?1Ov1!6p47g zH8#)i$AZ%!A~IhyY6RCpH$x9W&p;h9KpUVN zA$d-|19}vC3VI&e2OWUq8F(K`Dmo<3_2m4(5~vm03f%(9w-26xo`nWdI(b%=4^4w+ zLd&7G&}Qfkh;QL}4?(-2XP_6MSD?3{eu!omln0#yl|fHI2cS2hKIqOUD33mXGnif( z#QwRr4B}fQ-i^>b&<^NP=qYF)bO7S+GH)=%_krbGz4EY)zkM(8%^9%u*jDD)KcJhTrw0KEzIVeT>*8U>Aqil7AtE3!I85D=+L(8CgXajT` zbPu!xdK7vJdLG&b9f011`Y^T(hDJf-p(1EDv;;~*thfy&_mEJ=tbxiXc*&t9&`>=2Fdx@`Oq?`9_oNLK({b{-vvDY zJpw%eJqx`A{a-L=dgDYJJi0qh#RfjSTG`Up+MZgZuU&EKbwa>jen~#2v`p@BvEgUZ zcaQVZFNiq*)?NLV%lD?Ne;EVDdG=+iO1{@+uNG?e)3JOFmyoeDozEp+Hy0662A8gs zXNhORNAp+6cfiu&ukflHniGv&UO0=J4BI!yCG54x3Z zje9oKt%na8fAJDHS#?|HUZ;5%G+fiv5^rdiZ+s>F_F#FcGqgq5=B16z%FyPmyY-(6 zwE0HkKlDNuZmum^zJ?< zvYOx4(wZI%th@D}M4wz;uQmSd3qmd*)=mAQLqT1g)J@!zRQ_euTQKfP_9Je786|Gt z@5*%C2aLOWUneaS>#pU@PuEo|a-8HH`GSutgXL?uf^?ol4j&20(z;o{h16?BV60l` zq1U|7+}hICQ5$P$n%7*DXhYrQ^Tu_l+C|*KmrS%Jt)qXNUpoI1_d=D;%7ARdy>Etm z^i{u6%If4Oe#d0+J4XGM;x{<9r#%1qHm;bkd6!v5czjOT@X>;Reo9&^ZJoIwe%)D~ zkyEq)otqqx(_#-%bj(j6r3)HcuC9&Mbu?U+s%~lPMkb3j?R?r_P`?ItqhABHtOWsm z6kQtVxeqF(Wp3SVeHH}zwSC5aS6#Pm>X&}aeE%=YAqh3U3uc^W3rugSW3pm#y4LuZIKRJt6Nuid4av#6sb9+N#s}%Qa_yMa+S=H_3?d!B(uBGePZ+SM2BJ$|gI9n;(aL+W5>c&)ieMKtK-Vw-~uESS*=0d5tsjF*R z8XDU(%5SyGuaLaDu%iDN!V-I0me!9+H(E$OUD#JLhei9+VXYqF@)M(ZwbC zxkT$QKh%E==%)V|p!!vS3|xOEeZ>H;GSRHxRmSS)*YZq$^9usw(Ot;ggo(E_vEkE! z3i)9yPs1Q5*H4Y0?;Q~8r>vX$MIJ6s@*HA7H*03g(=dTKsywF{(9IZWc^ZbkJlNOH z>_%2IRaU9MxFhnI>5o;?JK0N{T%B0HO(#X(oPHlZB3$}1Bp25D(XgRBo@&Y^cf_UT zEcJh?=COpf<%!<~7UY7Q2&y<=HU#$+Y~2kxn0Pnrf&7GL2KN$n(QmKN>bLFP1pD;gWA6rTtnr z^@|LGef7nj#9zw<-0a!32ZljEEeU_IYkPsYkJSIgR&U$+>HD|tCcS7rb?f>LiRaAV zm||3lDc-txqA9UTnw1}i^=tE7%9_O0+s(l^;w@J<2lkgNPs1eBZE-g8JToK{>!yB5 z*~OnnTRgLyI<`CwgUo|+T-wXMLG&tN#S!q0?W{gJSbMq$6coGh(7*(e{-&Tye`Eb< zSmfe#QOb2ehB@U0nm0LD;`(awd%l(X%9ge!|4x0EKg-wpB3!V26m%nl0w)9dHJ2wT zXF-Pc;rpdecX7XI{2saIX5F>C^yjV&>ycGKmOVGi*Ko84HzrEiYGvM`Gya+u>HK6j zDqTO;j|m%%hUV=NEJQw|=AHeUYLJev6z;%hLKU@s^o7sBCFz zOw#dQoN8MUYg^UXlxptiT81(Wzamg4(&o!TX<0Wbs}3FPvjfXZ-pz~Wfo6>VUd;o)dx;)u18doyif1g92h%A!H*$vI9niexB z2nvNL{5Y&%je|bK$wTD1EI2+{we!PSz6}=*=(@P)NT0W$lc$^=NAz`;Z^Gs02f`gT z;p}!WHDDjI2J&h78m>t4Z~MCYkef*_o@$ql+{wnetN*|lQ-f@BJk6Z;CN7NSX_&y= z^cfRII`O)WRMH00XvNI3V$!kY(O^g0|7%x^xEeKcRkf1akD4D`d2-|}wy_;U5X0v&VZYxMmmnt0U6Ej($NTAt103iQj#^u;b=Og+v| zweb{#hZ(T^I<@{Ze4r1PIitomGzi!%Z zKW)DW z(Axf-3_5j=%D0Ss1=oFNy^D3Fcahh38YAriSiDXMB$G~)u4z|%nHlAoc@^WPr zIgauWRC)`_myhMyycVO+ZZ7wz2@`LrYD%@OVoGYCcBS>r@--Z~?b?Byl^7M$9qXok z(Vd_?W_Qz;XFGXNXKq}T@piV;wMCuet1i*lxXv$?lY{kV(_0y+zgM~o-`bd{3yeY5 zpN6OYoJ^LXceA}3)**?y##F2WVD~GnHKh0M%TSx%d=@DLj7T3 zXkSm{Q|RKS?t=N5&`o|OsQ)r_BUt7MS@PqDVa#-T_zG#K!$>dCb-Z8^#UbHhgT zw`(}R>G*YN{b<;L?!0Znc74`r-PCVcSN*NZpl4ND{#2;`j_*cZ$E*KB+OR9TwC&?v zA0X3~iJjodc7f$Ny6q8Q(`(mePdc}cqGxQU#t1enMn?^C^c4-_ie&w{% zs??&?RczmxElgjwmapLgZMYuUo)VImbyL5IuKG2$8+nb@{FkCDt}hXt9-Cp0%J++Y zxcrNZj`3nwB^ny#K;^vVxh+@YKmHPj*+k|#tW(*`b5tiI2|qqV zTH`gXGTL}>@AG8SHfA+1ltwsjWo%VTGw0^p{4z;=Cu`W^K))jG#D>k>KUlt%MKNi* z{2eyoy7mv&P5l<7Wt~LUCwKGA$MQ5xp#4gI2W2S#AT2{7`tI@~e!2V8OfQ2v-Cz9{ z1m;rW_tM~A9Ycsep@bI0&1Xyu%6f&_D>(84yTPz4G;9IwIT$u6YsL&8=M08T zy0FMFIKDP_vtDdg|5C3(nVgtGCMR0I`9+DY`D(FeJnSSt@X@efzFJ&5fv}<k;Fl7}g7{M56M zICaURACB_5KK>OGPTK8}a|X+^x?4`UTo{=TPw7VAEl2locPV|U zE4S3$>D`pu@@$?;L;X`UL;n=j_!IP-ADXlTgY>hOZ(*vgp*2;@iRBJ9TC~`*Vb2s!j{AD~v9hXYNd@{W zCVRTY-d0Ua_CuI-sM*-IKa>e>FE$>D)jsb;$!Gzev6Y=9V@LYER9u|#QBpw{l(sF zZ9}j1q+^-OoGA;H(UNGix}Z1ZZ}-c;{HV+C4q=+&7Z#S3RhN`nMay3H0&|Ch$Vv8r zdzAf=^=-@ECHbn-!f0`EbxdOIN%oifWtTCh$Mgewp00cORhekx{1N+l`Bi1{N_nqC zO!l&$>K*Q5{mJ_@J*M4V*@MZ`o1%7chFN2>r{Ct6eL23frf+-fkoL=FQkNHmic6#A z<)!&H_3UY{^rmTogTY>=U3)}|`4t6~#U=8pkTKcQJgN8Pm9Z*gndLc>S5;VA9;=eY zBqn>B*LiaOLyX*KlC_*&)8yrA#z8?EAGZuI4w`*Eft!mUa z^}V84WvsBU%Jv>TmGN40$BSfea8GU6rQ21PyChv)S`;hGkNGpX>}8(gJ)}Zi-c#B- zJ|8hoc1gV~9<63}z#3Xi_Ows)<-HugJ=Sfg^~BqFFjb%8y+p6PvZSD@s>*6{_B6+N z2hk%jBYNsHLi!X)FIrVtR9RAFwJLjhYkObDZp*hY#T-Q5cH(iPS6ozDS`yD^(*~10 z?Wx`p6{@VYvdZ_!aWP%oF3FeW7gSYNmGx>4c6#s2p0Tf(-@Z;hN;N;x&|J+la0L&* zX1BDodeN$QWm!?BYIt@TBz*mTpeGrG>btwt%gf86l@-Nqi0GjX)_BjT;CJ+tzLf!! z?ND(U5R0ow(bRZPb-v0^@3o%Vv!++UstRR86qCJ-L;Uab?CPn1(lOwY zdcHWX?+nDsE28<8`8s>*DXsP16Iz%)@1k7t6mw>0<7%%e9*Y%LRcTkyL%B}&`+{DL ztr`0RGgq3`k!p%{xNTrBTAp7NtEkioOm^9B@Mdax5A}4)9ci~A1?|K(HJ#!ta?^v=eB^Mtxr!HW_CFxZcmPDDR>QttObT9F4v|{ykfmvl8 zC^IKKQ_bzXOF~7+={PUHqAWkZsGxUgw)S49(rJdY%QiHgrY71_jUJmD1qJElPY-2I zdNOAev%aUks%!eXG;pc1+$=1ply?)wWUt>^zsx=MBcYPUQynexnxpD`Dp?`N=c~(E zX;+u@YCe*z%)TN)b^Z614PMO76g zvEJy{M~`|;tf_Bk_6iG&tMjWXde?r(o4Z0KS2sgF_8GDZyU@Jizo>JCzF=(kgDGcA zXPbGC!ZhQ`!m^UW{QL@2;Oup~(buV7CCdz*zPhZU zyt1OqO+9+h;|qK_FDKm|%bRijBXei>{#&d(T2xf%I*#n+o#D@4NA$kDBJtW_iY0}t z?BjCc&YJ9LHop($<&c26vBV04148pF%|y&AiItTV7gqOXKE1-+#Va{}9(osYukAMV zvH~`zt75&|Gn?t{lf*H%K|Q7)YG11I_I!YxlJY7`N{b3htF?p4UI+8MgSszX2KFlL zu5B!kZdFxTei=K3rYJq=`Vw!S?y)@58-3&4L%fY%qz!dzY)K?F4<1h-;_N2HY?3{s zIn7@;JAM@W`oy=`XrgRYRG6&Z;zT4SCjuuo_%1x-& zWY5Qf-uJhe`xv^rd2JOeF_Shs{*h8v_*Eq({*fn5@Lp@Fdd(=ryGmie*J$0|N ztTGxei1lV%OZC3Kr5%RqoY!twr~Hn#qJkG)%gbZE(X%tXv0AV`z0r3`x9gY^O1e14 zPI^J__BLaFnR{IOrRQy-k_RRfUSYhlFqU7WEi8NcDm3@>i-c-=Q*K+gl6Gw{#p=?^ zvS^i@$hRhYnnV4w6Sws~&03wO^4bo28mxT^3(E>(y&AVq@Lth;$@?~1&FaECCBglo zw0vtXZfQueX|mcYj75uC0rc)!+m(J@F7JI>p}L%t;-E-tA1kEoEDh}%SI8;e@aSY zg~b&`wusr&S?Z@#L!PqM=d4<`qUNpiii-2A%PJ}>O(}XR2XFG|{O4IPYy2~LiLj-4 z-TXvHT|Ms+7M11~7MHsfc~9w_<=vwB>9HLCRi!;$izgZ3TunuBepO*_&efdf-K7PT zXKGo?Y6@AqXf;pwd1Ttsmh?BPY5CQK`IUA!$zFFOy!*7wyTGjJafF-!q?gy&nsOJF z@JPIY}Q6S>()V>Pd_As7vn0P#c0HR+N?% z#P!%v4}DP7pC9#@R`x6HOv+Wo@$#a4e;Dr}?T`3#=3dopMMFznOH$TLwX@o-C6zSy z51X_rWKg$w=Xw9Uep)Fm4qryUb_HhqjFA@tH_B=^t?$jAo)VzcR*? z-CnN4=l6b`lC#82cM=`-?1FTdJ{3xx8Hj$g2Bt zv^kIuvAUUpCS6$=FRQAqwvY3(*F%f12R-UvsQl8(eQ9viy0+EoU|~r`d3CHe&zY|> z-#Qcd45PsBrp&>&vRs*qD`Hhuy(;r5<~wSVZhcSbF5(5f&X(5t#H!R{dtGu`^6Ulb z^vQJbUNjajs4D2?v$0X;yKRz(TYB1Kwbw!Fo)3E*vzo8$Y+F}r-elFnN8@GH)djuX zdz$5q?;|ObHkeiJT*t7gneQ5`bEP+_2Cv-G98^?AqfA+P^-e*xzrN^k9n-@*1(Ug4 zgol!`(&|`I@Ae_a`18Xa&jLwb-*pcnee}4?vGd8(j=1sUyku={iC0!sRUNC8%gZs@ z+hLUgXyUg#bWWUrU&y+=*$ zdEShk)~Z?aA*Y|*9WJ6Ag2%m zJcARD=k(Mj%v^=h$z2~TL*nFV)+W^+Wvhv8fb#I!AMKq#qXg_zPmZwk(rBm+&^v22td0>KbdK9<_K(Lu8OzRnd?8>&n_q^EG#Nq zk(`t$D=wc@6ipOPD$lRWpH!Y)nTX~`S4I=%#pijY)fMqrL0rl=>ARB;xjycze$43~ z!V`Dt3&l9U?sq8;cD8pUuLa&V6Y5CboAAbW!^@+fr+34vfH$%m-evGwAu$T(x8(W9 z2vYhlF=5{Km z3G?oPx1}52xPG4Zt!{X~fX657jS0v3J9u^7@Rsm>*|EyYRTPkXu7~H!K(>4%yqn;y zmLHffPrfz#amzY_cl~jm_Yd9hrVo_6^sNcUc>%l=yWw39@6+Az4#0DDgcy7yS?|lY zWL^0vj&Fo_BD`uXUzoRyZ^+J8-(lW;@H)ETjpEy}u6*HeXTo!O8Rm_LH&Nqs;l(Q1 zTLjOQ0nz$Kcu9CJt}w3&-ca=&=3Ni(jBa>egjcT_4Tl>*goxXiFz-ZoCv?M;Zj>T#PfwRC9PYdDp42!|0pEzz^$bSeP?s<-%Ao0V zFU*U>`-z5gCU(OcK0e*=y1Ejt zlHRHCTpu3hjfdy@%`mSp3-3I5uKk6>T?p@QwEcy7FQ4sspV2b7e$C~xg~B;K3G=qX zTh&dt-@tSA9S+z39M8+sa1O;Pa+v_nwUsgAs782G;eA%^VcxUwTs~1N-$=OE197_X zOgsqhf8cFZxrBK)O!2%=ibsr_8_918Hz;4e`C(0%Hx{1L-7xQG@cu)?p{l--ICn+m zu2pNoy#Il>u^Zk;3)1oohx{K%=<#I=Uv+k?-UjfZY&LlI~!h}=3s)K6I%}#!gKjVjeR5eybRt8>JsM3NsBz? zp{l--aP#50I8hJZ2rmK8jm2T!CMs`{`VRAc2G8|JVcu`ysaW`aY}!bAhv88SW5T?1 z&P~@}m{$d_QzF2GdEcFu&P$m0GkC5Z!n{}Exqf1@joSQ`WUii`&P$kgGd$N%gn7S* zce2J6<_$S7t@AWR-$;6&fk#ysLzD82@O})>)nC--Sbcd3-h(RaFmGEdU4LQTOYmI% zg?VqntB`~-G&kRf)6~keTxc4;5#AzrL)4|n=h%EE;njD;dj_7H(}ctA3#3PL^NpnU zRv^6+pJUS-5Kphw!o2P9+j|Z)fIki{Z`ehIc1CSGVEx zcEWpF!#Uj-t7QEeB6R&`nD<3^u1$w|JK?#y4fB2o?>J4*$-t%ePw*~PnT2`hTxidp zh~F@82RyeHrHk^7MD-nb1JotVdmNt2OPKeQEWEw&oDPP=y$a8jIm|ni%DYeVLbvA| z$>$H?El`&*@1)u3{Uy3K-$=M)=cLDex*^{P?-0D7%MZ-?7R+C9dTL&}51A3-?T6?3 zkXVTKTX>&Vw=i$x{B&Pc5eoNBcy2tR%kYil6gqf#2nv`!O++*-uoT$HVOnUGxQ}Ka7~VAR^xg??QO4 z9n|<7TZT`;bGl1WeIw!i4xW=)nD;e!XQ=Os{ZKZ}=is?<7BTon;_P>6x;;=F-w3Y` z-hOo<3f~AXP9t*d0dKw$-j(p2tX*3Z55g;7Cf^6NhM&F>UIz{?@0a@=8}3K&I@Ilo z5br!ZAFFP)Azl@{o!#*M8(y38mWRUClgOEpDNMqG`72JJA`z!wD?+@N;kh|$~rN7o05O}y7Pr1xf4S}*3W@E(I#pl)H_Z{WE;F3c;r((_z>hk2iZ z_m7&-FmFy{dLLy~C@;(59ZN>AQ}hJzp?&*&@DE)-=0eMO&h6-7@)TSyQ65 zwS8G#3m<4}Ube8Ii35C%$z{Bg)4oiOYp&v6wp23D-K4WDI=OgRti3(OJyYD~y3BW% zQ$@})xvu?BnN-V)E0@JnD>_##n>@Fwrn)WBl)9Sl(VxS&P30A$=~op^E}dL3S#!CL zPYbm*tmxzj-k&&M>B~Qzgx1M14oMaBhu{3+H`1kQw<=E7NGEE|0MoJB-;Vny#akxZ zyPqXbE)x#rnadP;n^DT(O{tkvnc&?fZ%Q-bZuh3Nx7AJIcETjzljY9z)z*OzBc|G? zteR>StFb#RYinqt!qBoN(XxiLmNn>I&_>HRjpww?cW>-yuXPrYtI5WnJXKM+q*b`) zRL4qR;dsG5sBoI$b%`zt_vguCtAD}rGM9}8)jgRg9}h_--*Xm!Fn2=(p%WnCi|GqZ zgpPw`BGnHX0Odk)0uKVkytJTDqWaMMn?sb1pN?x z8u3lT{ji3A3LJ>L#Ip;(d0-sA+;#dI_SdjKkDk7Q+asiVGw%0bUkgv}&X#<>1aB-j zg7o)+a^LQwgp+SX?gMXBzmhkx?|>vdaes~c+zc)!&V$4w=hEe_y&GvOd7$`{GnX%c z&w{O#Z6CiSu185<@-P10BwQT3teGVKeb92;I>^I|@bief-?28n<@|mT-YxJ%){@3x z{5%8B#$D`5?1FdUM^H%WL+0tDpxcx$?+-{>58zKo>Sh^n_T%?V{Plr9?Ie5O|KTFr zCB$%(=M{J{@*B?Y6QPr!5s*A1KN&g&l6PZ9L#INgK~mN+(CN?_kjQ-;B{LL$3K&}3)|ln+Ir0!TWWBB&TDfy@~~upF8SoeNEarbFjJ=R-3fifFn$SuYNT zs1nniN%tmQpLA!ko*D{CH#iI$4#_?@qA=$yMuO56$~txwG#WY;It|K$#z3b-XFy}2 zanPC2SUzkG!L2&Er1q6i=Y}v_LyWp<`QTLBzr)Y zLYG0yAhu7;IUBY-yyZ{=S^?ETNhk%agjPZIPy;0E?bT2t)C9?zSJtnskgP{#-PsOx zK%LN4(ACgdXdQG7^igO%bS-opbUm~I+6dhMZGtvKTcD3YABVO=+n`TCpM-9NZh}4q zeHywM+75jN`WxsL=vL^n(BDG0LAOJngFX-40o@6G0s1@WF6eIPi_qUg_dxeTUxL02 z-3Q$deFgd|^Z@iA^fl<~&<#SD;s+Uqk;6y#~Dw{Ri})&;jTT=)a)fKnI~i&~Kst z2OWlf2mLqnd+06bP3V81|ApR$-huuA{Sopa{D*QNS=&e-))&f!j)nR`vL`YCIu05L z$)3jX&_^KYONT&1p%b9LMpH?-<4_e;{Z}f3zs7oZWj^Is`4MU7&b(U{IEH|^kc2y4 zBWVK1LlXDn-#`5C_52ooBP6^O!VCJnE+_5x8(%o~vABDr#r>Mj@X6Lb zN8{Tw*4oR}{S7V0tZ~-;$)OexY5qr#vG$!s7K_z>({a}RhL(4Yy7$$5$+#)yx>w~h zF3;Lyn*Jn}*G-zvO?}nB$|BtkQvUuC)}MS6Q{sP2<@lV|%fl+qdsUwItNR+w z&jQWw$g^$u#90>KP&vlbUoq`P;@__I*I)CwSFzzF%fG*$#VzQE_+O`T-ZIGA*QlI_ z(!PTRNyR(n=KTGvtj^<|zor$EgSJQo1^&_V4gH&EiHJ@*(`yTbT zQ{~>I@_AU(8KUyNTjh61;~%O169a9!{fAggxpHcKY}b05p!&2|%k!#+i_rN=zTeV% zy;kFYPV4brb)Thjl(mrfU!Zuc;{A#*C_b%nS*qo@SIaR;%e_>wLDRccagOTgI>o-4 z&pTEAhqQhdYkS(L_@LrQm0$lcHlLTPd~etKefdo5-e2{rSaHn+>wc%=9@WF$Dz_%B zzuOg`R6L|OTJ`x_#n&CGo(-R3p5a=a zPR-x%)PDD1O-JkfF_q(Dm4B7f2hGpDic3|$-qHNts`6}ba#b9pdN5t{xnJcpMDw*x z_2nkb*Zo?KHLCY9)xYiPK3er;meW6#$98lKRr0otve;MK+fuEcz8bz*?F}w{?br5d z`;d9F#1m6JtWtg0qy5bSZ8r;4|F)>!FIMb4&W2y7@ja&Xl+t)_8ff|BH2#-0U%NHG z534-y)$(_0`KPOVURHlkYB^ufa*WgZ8m;AfPV>>A^)*P-+oJh@Q1#@1T8@O~B`e@F9qr^^39 zZ6AkJZ#&1@bS~HWctOMO)O=s7^60DOU#vJm^SegV->K=0)_(VP&FB4E?jh>$-V<$l zqcwl~wOk|nS@&`+|97NT^K)9R*EPSgrzCRQuH|`5+d*HAcgRG` zzhBF>SmTeWzK&G?Z)m-~s`-Ao$cF2$?eiUVFV_6Lpz)@(9q-n1uhDqRqZ(fGwZ_R$ z>vxaZr>lH+s=klb@hhTwxL5NxLF?^7?RR&pK8@4*yHoYIN#zpLbRKr$G~Z1c|D8IX zjMMmDRz2CH?Rt#L>4mdwIqr1&sd8DW@jtEYW3kHPL3Mvj^FQnVw|6#RR#a!6FG!;; zAxUe{V1lMGU{LwEU)_DL0n+zVP(E5{6tzwFrTap+boXs<-xi1@HU=lSV+_fVSu@cI z$(jxBkQvP2E|XveSDj!aj+rG1?%)h=%r0h`73VR#nsGAod#m14x4YopDowJ_lZi)v zR9F4$)H&}tr%s*vxaZa5-KFL9inga4G~Y|~_%Bh1Qjc>rA9FSSyVTCrS`PBNRM~H# z_RBN0oWG&8?-jMu zQ8FR<_>AU%hNed~+S^~!au`wjA6EPC(t5sD_g^yC*+1FnEYH>cVnECF0kvn6?)Qr3 z=Y_MJ{hu@Em#G&$&QogNb6U?AYCe|feh;X9H|y~p)8jm%c23azHtBi$sOIY>wfj*$ z?{83hXX){NuJLZr^Wj2GKdi^ScAk^(=XJlE^|*IwdEBb`AJBFZR=dO6Uwls27ixd; zu-ZAvv`@8Xf~LDrkMk8>o}+f&s>_8MKdeL(N44L1M9V*^`I(^kcu31>mfCTdIq&qi zTlKhGH6IUXdC%43yspcwn%);QUjw>-pVrsiT3@Sm`#)>H^`w?_LbpGq%b#j{y-3f~ zr}X@KUGvqX?e7O#f1lC(zoPBn`yr=X{z2{joUX6d;HAN<4LWjujzSzj@tc2Qx1B5zpmx? zkoNxr+CB?v{})t$UH898kN2dum*=&;KBw(UenTz&jWwy>nv5-VTjf2_1Zzj@sMWZO zcMA=T)@Y+OaZ+9V%*m7M8tZrfP|wSp2GK_y-D+%TkY}!wtvL z)`YrNYoZ*V{p4BA)K*7WLwW6LL_eD-lN(&Up$(nT%Ig=>w}x zWjV?lj!BamocwcqYvNX0pD~K;9Dkz3m-Ht|`s~t>B>pJz9euRbeu6BD1fCR=Upq{+ z>PF?w4wlv9%(7MgKWOU-hvu8}0u$UcXhMJsH>BVYM>e0@4IHQTmT%% zejn7&aue);eQ+3#!YOzInF4zRy;C|Q*``{oPhNJKzyaDwTjl2hK zggFq0LvRx0J#8IrXF4>}2gp0?IJ7|rl;IwD5ca|WI0VPxB-Bw;4KN*MLkwD>2e!jb z*adrFKRf})-~`Bv$|*1nLa+c9LpyXqKWu_+umkRg-LMZ1LOtz$Dl|eIGSC6NP=su}cF?huIK=R#*c)Fa+CSC+vYI;8}PTrqG~fLI@T^J9I%m zY=UjD19rncI0%Q~D7*-#;0>7iF3KL_&;}jQ3uPFEd*D9U3kTp39D(C-5?+Hku4N4{ z9cDueT44)phn=to_QMnKEF6Oq@G8g$$5UV$EQWUIf_~Tp+h89Ygu`$YUIclj`UY_J z(N$sx#32K1&;h+L3irW-uon)%AvglZ;Uv5UbzEB-U^>i(7%YV~&;vuT1-8RZ*adrF zKRf}?!ZA1jbT8HvmwF{3fjDHK4LYC~%5Wb% z2z%iG9D*Zo98SV(P{%l-0j9%jh(RkXg*DIvL$C#Q!5-KT&%!Y{0k49*xSs;kU?zlM z0o)I}VILfXqwpe3<$B);b07{fuSOemKrfVG6n1j`-UWMLKRf}?!ZG-_5ajv)#&eu+ z0PnOezV}nssg2t(>{JV7%e~1Q{+>-AXaYr|zcubpDXClE2Kl zv$fClVX&9Hd)&>u~%6J zN!Rhgp~+s~SMFVw-$b`kHHf|PZm8-GZwtTmC9oKeYxv&Iu3J~=F5{sn8Oq=y(=p4m z^E0>m3+?ZFWX~?B+5TioyUM50ojO&i%u$-|$Jv~?p~>a&VHjw>{+ZTs#(om^vh+>& z^m$QDnt0zzCSu{VeXQEHe#o`8pS^w49Aj&hiCC>%5*KSN#=BjmPdRg0ueQHol#HJ6 z>th1X1#6|l&Eaq^62$&t*Z!`zY=5RW&?nwWr9|)|*^F0Goyfm-*+=X#yx9KQTdVK< zU|+dd8kc+)hpbIaxuhJ`uk3GjZI}C?w^sLdQ_q)5eKhq@2zTe{aNJJXy_TH0-Y>RZ z0~sT zb$SoKbLbPl9{;+UbW=+#84o2xYO+roUgrM(w#%>o(DB)6DGDeyZp@&D8mYiViDgqp+zpSr!${=Q!J8}jQTPQNZz%pI3}JQT^M zv++P<@JoW*e#X8+J(;!PZa2qmz*_u+EG-s?tZpxkZtp-h39E#@p z$})ZrCDM^>G!o=`cdq-J`GbD_la6Pu@8w5@nc~L5LXVY9q{5+eNJme8{lk{G?CX5- zNdE>an@J|4cn1wsckg%mfPM`&zi=Zrz_SDJ5GsH{A#pN+OT5KK69;X zHiWOMh|?)?%-S}`-FYZ?y_s_r$GvB#syusv4g?@{N8<9xm z_Q%KO9!tiI61MpDRpZmwTLY6Sx0}&OIuhs{?sRST?MFP8W(wt^++pkWw$PI*4y?6u z3GTFW&4I=# z>0a>bxj)gQ)1j6~DwZ>sUY|BL)g5Q}KHsRcvCdVvtDzUcy*bXD@qybC%ch!>PFt;Q z>+Ns(n%LgkH^`Hlrd%ke-bnoVs@e9tV#(DG@a;1K`wFts(Rgz-6iV3!*S2@7+ol5L z!PBPFxXGsXO5?)1RP1L&5Q&DfsUYd5?RVOeL3uarYrCX7{`rk3=_I~qVwtQCl55-C z?an{mNW#8pn{oN@=I-9U?o~XJWrR*&9Zx0Fskj+>__X7z+;Z;1=74E>N?XRx<$~>m zhLK)47K@sWqqe=R?)Y_DaC;?f+c%y`u{p|}eWuwA)qU(8{59B%kF+t)vsVl*Z%f+) zF{?Qlk2ghgLB`W-T|Xs9-dwqNR!uz~;o)>P8SI(aV(U2RO1KYv>)li1+TY$I9h5Bl1z0l#_dOTms%q(0WarbIPTbf!zv6PdI+I`7#YrEFR zK9*!-T##hl=NZ-Vuw?MIzTrL^^OAL|2fK@d!`*$wkzwAh#o{fIh#8Xjlts$*vnStK zy`_At>g`)sF6T;IyznM0x9jcP23WC7OdK{l7cq`qyF3=U`DlA{b+WwJQ(!8oipN_W z4PRBt4{@2nM|v_GNvE3w-d|oDyuUqjA47MyqLktmv&U&8s|w8C(^uZi{Z}O0-0Ti% ze9GheUuBG}XGztpL=%Z@B9{pA-1Q@FI}J3h(QACV(BD78kTKcAz=lhFsyWRFy(w!N zdF{6FQFlI0`9{#UO=_AM+Mn}G-D-)a!?^toa$PF~uWvaIJ#{YARuy`*xUEzw6ryO8 zj+M1-ywsknME0x;(%vQA@z)ej(oIR8q`Qv8Yp0!bZT7wQ6Pum#^;kY;Kw(8Q>1Z+( z(=)7g+EM#EO|iQ@h~1U6JIAJ&Ye~n$*|=Us{rZ;k+;3;(yHNfg7f$PIwLR&Bo0Ww; z&osFAiALkNDs-aOw(-6892K(X0SKDjb;Z6O9-3^hqRDU*cL2fOwcX;@WmoXDJaxIO zz=uM;#ZswQ$_^B`u;P?47f(dRD}@tk+uLEy)NzXMH$vmvQ|IX^Cz=z{TqF|cIl{+W z+XM9zOPFhrMkEi4c>jZ|`Djy0oqN`{?*=!WcE2)Sf;;4OE7n=Drcf@PN~Z&r-{n?F z$3ODDan1I!IA3D=#Lc!VPiDu9wS=Ng33Es8cOHD$+Nt^RwL?Z$ZM+if%oR$GpXbzO zz8zy0zU2BsC*<uE{CXEQk*j=9aipxNMtCvI#|GxbS#A4Qx_)wf)0JLfmAt=_**bZM+DYm% z_O-XI%=h$-3~LUepD~>mZlP!^^VAqAK-S@P+ zNxPXImx-kkfv)Kd_WWRyw(tFhua9Somq58FHv)1vpZ1(_+mr9PWxz-6MnsI?u-WfGZa#%W-+%Y3Ol-=ySoIu#wDu1`xpQ_64D42%K?Pr{~6;|~3xSLYN!4cj?YGFhpnRs(HlMx#w)Gm(^ z_q)7<>|3)uFwkF6X??ubpnuZ3n*X&tt!|c-M43weK9V&%9K$ zIhDvIgS=~2#)XxV=UJc*pPU?olbJ|167b#Fbo+OEl82ps&sZ}|CBEJ~^WloJ zWbl@e(&kQ{`}A*C}iQT&#Ikvosa!(rNa6_285f9^>(VMzEZh&#Ynlk zI8e|Wq_W{KLzY0lDapC_7ryr~KEElM$K>O@luWkdlCfaVA!fMaL*H+Kq^}?U45G?s z=kpe%dAU;@xSpGpkscm3}8!naK1o>KbcmG=F~s*$xi z!g7A&<2;&eFY05#c?%YGTTPK@6Q8~Xxqp~%ZPR{hZ;wiQPDJ*&Od+!vWuAd_4HG(yI5O znw!I^Xebr%9_TXnp1`+{sxoG*GG;qHb73+Ui{_$yGOOK%PaU0ObxA>0370oYXU=DE zC2_jYc)1mC&NcBNOR)QcxfYj6J51wW?H+Xt-yvieBk&+|eWutwGEf*S4__XMM5D3j z+Mc=jcvE6-ES!(dO@z8ba}z!5^5IZ;T{xd;T4c54Qki5VBlgYx*1T8DIrJy)kt=_Q zCfm)oVrF02L;kks?v@pTS1YpNZbv#zdkt-N6|E6NFR7xX&@QZ^-Gnv-5_DnzE%|zy zf|UMCf>--C2n-t%ErPmg?SKZ8uuEiZ-3O11K6hc;j7)X4<7!n~ipb#xwC{ zRr0wC&DcQExJV??W<_Lno)1O$sCa4wu4u@0PVe1G?}}` z)RBoVyNV5|F~_7z+#uR=v=QCn)gB*nOque*1c`TS%rP;?4WgYudr9r{YCkyN@e?2s zyxJ)==Zb#1Hj{?iD3J&a&cgmz(vx`#O#PXqh@!1VV~QR-c(sl1bLRLL(W`wA&GcDb z?eEaK^q83H2HCWTN-*)f+DbH2N2VSnvc%hfVCv1pH`+$DxmuoH?Lp=vcuaOAc(uZG z$1lN|w8zm*y?f)unHS6SgI;YVnz4cEa)WIHnkg&O&&UpQJLNzuAN z;@ypAjw#n~6GZzXv~BVS!K+=|SSb&4Y}rqCkDw9N4qmMdZFLpxYiJak9lY@#YpnD= zrtD-#N$+tqd2cSkt9^Hd<4533+E*{B*yWA)Ewm@~m^1-5$fi5E7=2T>c(w4XN+06Y zGHB0eJY%P<$}!KolseM%s7g1;rYk;NIVZi^N6`LE_x5T(L%X7icK+;2ziaABc9rxl zMl*f5SDTGy`c1DEt)VSKGv}W--qmP-py!`gd;W6ASBB(`Y17;w`7C0bX(wK7JKB2P z+pE2dX6oCkoioR>8a19-%BrMy8Jam)X2?bjqFsshhq~_7o<%eHq*=K^;=MHHnC5yW zJBaoRG?{}+f>*n9zT;m+G&44mza`$gLXIyPS@&u)(M;R*YCl5znM5McRNWxQJQ%L{ zOZRHOK-;Q&d$rpmmGbmzUqZW6U;8O_uKO~(zQT{R}2SL;Gs zq~+<={KSCx!N$*uO%&@~;UCKhV zIUlLipI6JG8Q;ZT?OO{fdGTsLLNj9;ul7^4&ubp$=~5PwmyHW6dGTsH&`dw!)&3va z`}J5}?c7C`HqWW(21)PpXjFwAIHlYm+S6#J{=%-}oEmNrZ57(Nx+Uf+PCk3kdaG!M(ae~}8}Im-^f=wzAnCn6 zCcS1?anhTdsobl1wa=lM@lJ~;-q+DgALrGcMw_Dhn>H+~l9wOX(0)=wd%1@8PiQl% zr1!yWy7s? z+EW_Ow0&8Xtbd#Xnts!(eHG1|(_ZaiG*h=;?Yn62)bvalnDqVz?M5v#uQumu=bgRm z>(%z6nR`*XC^yKV{sL{XZt-f5qnW&TwP$K*&!L$%=#BSNG-I<@yZ9RBm(#q^?YTkn z`B!My>K3o|zNMAtOLT2+ka%Y=t6cl(hTI_9D`-EKKL{Un7WTig>ClQwAJXd4UO+Q_ zNYbPIBid(mn^)V~R_Uu!o_K$bX0Atc8E%lgJc4$iZsBxugJ{p7nY?gHxk0qQNBfR$ z@oEoHn2oA&O1VMeJ&IH^?#fp&9$U+V|0R z>fT;0zp8SMd9@)lQ=UuQ)SUCSgl76%ueKY_ z8rlnJ{c-?;H{LRCD9>}G)3i>s_oznmcY_>ia7;X!xEn+pMSED&Tka}OxrDE;jE`x? zZjjxtL;GvpLbGy%XtUNhz8qzvS4*J{>fSURH%Pp_XgBBIRATWi(S}UhPlOKBRkJ=f-l5`2#d_ouwGuAjhn~v2s3OjvGYl zMtecGa0oYumf<8a=L5UBL9|=YOj(7ly&}egJ@+on7rTYDo(ubp_O&p z$2{61c0OCTb$YZc+QU_}|BF^qt;-Xymqad=OcC-)@yuO$nITeCv{t|E@dIw(gDYBs;rYOH;A?#&GbDa?FP|qMVp~p zyxQl{%=zHezJm7tD)GLJX3hg|yz@BO&9!ZVn-j-|cC=Z#&8uxjYkP+yQVebo8=kt= z`5lF9BxyH@cF}O9?V5f@b`Wi54ebgv(@zv7f(D7V08M;dN*Hn$_P??z%SrSvdSM}3 zZV)ZAvC?0g^Fnr*$baJVM{;H6rn`=P>-9Khn=D7{r>hf)@ebZUPO{G8%&cehHkpyw z6uj)dn;L5%=jZW6e<~C8UVwMqX}_$BmaGb!y$@t!*y&$*ZL z#B2_Cy7Tas8^Tj=1TVQUJmfahv&9*aU5QuR1$e|=#7L->o;QUT+zcLYbDRN-@qBwV zSD>YMyj{+j+r~(2C0=gZdE$8;EnyA4_>GJTI`C-wF{{(+;*4L*Tdy8Q1M9d8?WM)u zg4f!9YHtv4wL^HSEm_0-H{o~Uzsg8N+Q8f4x4i_U?-C!mS6$h$iXRaSEbUuc%9l2G z$S(>8@7<}Tq z@V3~zmU)qRn#;|}GT&dW9pP)Y-*CPv6Tg}g+AN=ONUDTizWmFVrAyUrRW><6I#DM~ zwmVzrZ=?Q3mpkW$Cmi|uC&U$lwPf-$Pru`vKUw;v3rBFVI7~Y49{PGrPHwbtF^LH-vAXxD;tnj z)>mm|eWo=@E8}ZC)5_fK{pI0Kvm)hcXX7`Xsx-JBr@;*t%In+)$1jM-HaN}j=KQz@ z_x~r0L!}}=hb+q}X|mC$ZBGWu?*^&l2S3a|gs;F9crS=9VG>*c?*ti0)x%^s3o=B0 z7fT7pu8qo}-VVS0C2$ueOric0jO*h3{UvVtWNAW-@$FGoX}WCd=a>^9zbE75R-}<{W3c>^nMkAL1|IcnjG6s>VOW zathn!I0xCck!1$`6ltDd{RHbrXs0i-Z9nPmVEcotZ$ewD`8OwJ%VR8`WjTax$N5{1 zb%69G|FWO>mC3L!_e^s9$2R%KC%>~K4hFe9qvZXHZ*7Nsb_Nzl*@IGu{pI2j+<@F2yDfDf? z?$&CS*Mr!01IY8;n?U^i+zcOsPUwO>tc7lnycS>`tOv1jq0(xH;TaS-Y9bW z-s(J-(j`uX^Ff|@Q!Ms37Zx7?!}* za1AVlWw0DpKpR{OD`6G1gFJ7NXEWEs8j$BfH-bFh=>Q(3aPLH2Ll@*>Ep$T<6kr{! zhhFFdx%b`x{UG@F%bbz5#y0PEQ}8`_8V3p7vO)uPvAxPDg00PUvL6mf}g?vh9whdi*OArg=MfDRzMqE z3oBt2w8M4q8u5Ms{{(NqKf^EKU%*1202ARIApO}SI1A2(dXVQMczCnk2~$9xZ@e4c n1JbXa3+KUm;ddq6g{{8_pN8$fLw5hJ)bHDNzFh*fO5k4sKs|9@ diff --git a/1.5/Assemblies/Implants.xml b/1.5/Assemblies/Implants.xml index 7cd2613..a7a13c4 100644 --- a/1.5/Assemblies/Implants.xml +++ b/1.5/Assemblies/Implants.xml @@ -4,7 +4,29 @@ Implants - + + + pushed always commandable check to front to reduct compute. + TODO perhaps need a custom patch order to make sure this logic always works. + + target mech to command + should be mechanitor, but not always the mechanitor for example like Dead man switch ctrl mechs + Commandable result from original code. + + + + Skip original draw radius using a prefix. + TODO may need specify fixed patch order to make sure this works. + + return false to skip original draw. + + + + Postfix the draw radius by apply our extended radius on top. + + + + Bootstrap class to do the harmony patches. @@ -22,27 +44,5 @@ Why don`t let them render their own instead? - - - pushed always commandable check to front to reduct compute. - TODO perhaps need a custom patch order to make sure this logic always works. - - target mech to command - should be mechanitor, but not always the mechanitor for example like Deadmanswitch - Commandable result from original code. - - - - Skip original draw radius using a prefix. - TODO may need specify fixed patch order to make sure this works. - - return false to skip original draw. - - - - Postfix the draw radius by apply our extended radius on top. - - - diff --git a/1.5/Assemblies/Implants/Anomaly/AnomalyGeneral.cs b/1.5/Assemblies/Implants/Anomaly/AnomalyGeneral.cs new file mode 100644 index 0000000..3e923c5 --- /dev/null +++ b/1.5/Assemblies/Implants/Anomaly/AnomalyGeneral.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LTS_Implants; +using RimWorld; +using UnityEngine; +using Verse; + +namespace Implants.Anomaly +{ + + public class LTS_Hediff_PsychicReaper : Hediff + { + private int previousHumanKills = -1; + + public override void PostAdd(DamageInfo? dinfo) + { + base.PostAdd(dinfo); + previousHumanKills = (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes); + } + + public override void Notify_Spawned() + { + base.Notify_Spawned(); + PostAdd(null); + } + + public override void Tick() + { + base.Tick(); + //Log.Message("Psychic Reaper Tick"); + if (Find.TickManager.TicksGame % 10 == 0) + { + if ((int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes) > previousHumanKills) + { + //Log.Message("Previous kills: " + previousHumanKills); + //Log.Message("Current kills: "+ (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes)); + pawn.psychicEntropy.OffsetPsyfocusDirectly(0.05f*((int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes) - previousHumanKills));//add 5 psyfocus per humanlike kill + } + previousHumanKills = (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes); + } + } + } + + public class LTS_Hediff_Voidlink : Hediff + { + public override bool ShouldRemove => false; + public override void Tick() + { + base.Tick(); + if (Find.TickManager.TicksGame % 30 == 0) + { + Severity = Find.Anomaly.LevelDef.level; + } + } + } + + public class LTS_HediffCompProperties_MetalhorrorEmerge : HediffCompProperties + { + public string letterLabel; + + public string letterText; + + public LTS_HediffCompProperties_MetalhorrorEmerge() + { + compClass = typeof(LTS_HediffComp_MetalhorrorEmerge); + } + } + + public class LTS_HediffComp_MetalhorrorEmerge : HediffComp + { + private static readonly IntRange StunDuration = new IntRange(120, 240); + + public LTS_HediffCompProperties_MetalhorrorEmerge Props => (LTS_HediffCompProperties_MetalhorrorEmerge)props; + + public override void Notify_SurgicallyRemoved(Pawn surgeon) + { + TentacleAttack(surgeon); + } + + public override void Notify_SurgicallyReplaced(Pawn surgeon) + { + TentacleAttack(surgeon); + } + + private void TentacleAttack(Pawn surgeon) + { + if (ModsConfig.AnomalyActive) + { + Pawn pawn = parent.pawn; + Pawn pawn2 = PawnGenerator.GeneratePawn(new PawnGenerationRequest(PawnKindDefOf.Metalhorror, Faction.OfEntities, PawnGenerationContext.NonPlayer, -1, forceGenerateNewPawn: false, allowDead: false, allowDowned: false, canGeneratePawnRelations: true, mustBeCapableOfViolence: false, 1f, forceAddFreeWarmLayerIfNeeded: false, allowGay: true, allowPregnant: false, allowFood: true, allowAddictions: true, inhabitant: false, certainlyBeenInCryptosleep: false, forceRedressWorldPawnIfFormerColonist: false, worldPawnFactionDoesntMatter: false, 0f, 0f, null, 1f, null, null, null, null, null, 0f, 0f)); + GenSpawn.Spawn(pawn2, CellFinder.StandableCellNear(pawn.Position, pawn.Map, 2f), pawn.Map); + pawn2.stances.stunner.StunFor(StunDuration.RandomInRange, surgeon); + CompInspectStringEmergence compInspectStringEmergence = pawn2.TryGetComp(); + if (compInspectStringEmergence != null) + { + compInspectStringEmergence.sourcePawn = pawn; + } + TaggedString label = Props.letterLabel.Formatted(pawn.Named("PAWN")); + TaggedString text = Props.letterText.Formatted(pawn.Named("PAWN")); + Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.ThreatBig, pawn2); + } + } + } + + + public class LTS_Hediff_HyperAdrenalineGland : Hediff + { + private float totalDamageTaken; + + public override void Notify_PawnPostApplyDamage(DamageInfo dinfo, float totalDamageDealt) + { + base.Notify_PawnPostApplyDamage(dinfo, totalDamageDealt); + if (pawn.Dead) + { + return; + } + //if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("PsychokeneticShield")) != null && ((pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("PsychokeneticShield"))) as LTS_ShieldHediff).PsychicShieldCurrentHealth > 0) + //{ + // return; + //} + totalDamageTaken += totalDamageDealt; + if (!pawn.Dead && totalDamageTaken > 0f && !pawn.health.hediffSet.HasHediff(HediffDefOf.RageSpeed) && !pawn.health.Downed) + { + pawn.health.AddHediff(HediffMaker.MakeHediff(HediffDefOf.RageSpeed, pawn)); + if (pawn.Spawned) + { + EffecterDefOf.ChimeraRage.Spawn(pawn.Position, pawn.Map).Cleanup(); + } + } + } + + public override void Notify_Downed() + { + Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.RageSpeed); + if (firstHediffOfDef != null) + { + pawn.health.RemoveHediff(firstHediffOfDef); + } + } + + public override void Tick() + { + base.Tick(); + if (!pawn.Dead && pawn.health.summaryHealth.SummaryHealthPercent >= 0.98f) + { + Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.RageSpeed); + if (firstHediffOfDef != null) + { + pawn.health.RemoveHediff(firstHediffOfDef); + totalDamageTaken = 0f; + } + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref totalDamageTaken, "totalDamageTaken", 0f); + } + } + + public class LTS_Hediff_DefensiveImpaler : Hediff + { + public override void Notify_PawnPostApplyDamage(DamageInfo dinfo, float totalDamageDealt) + { + base.Notify_PawnPostApplyDamage(dinfo, totalDamageDealt); + if (pawn.Dead) + { + return; + } + if (dinfo.Instigator != null && pawn.Position.InHorDistOf(dinfo.Instigator.Position, 1.5f))//attacker next to user //apply 6 stab damage, 20% penetration + { + //SoundDefOf..PlayOneShot(pawn); + //BattleLogEntry_DamageTaken battleLogEntry_DamageTaken = new BattleLogEntry_DamageTaken(pawn, RulePackDefOf.DamageEvent_UnnaturalDarkness); + //Find.BattleLog.Add(battleLogEntry_DamageTaken); + //dinfo.Instigator.TakeDamage(new DamageInfo(DamageDefOf.Stab, 6)).AssociateWithLog(battleLogEntry_DamageTaken); + dinfo.Instigator.TakeDamage(new DamageInfo(DamageDefOf.Stab, 6)); + + } + } + } + + #region The Cube + + + public class CompProperties_PsychicBeguile : CompProperties_AbilityEffect + { + public CompProperties_PsychicBeguile() + { + this.compClass = typeof(CompAbilityEffect_PsychicBeguile); + } + public PawnRelationDef pawnRelationDef; + } + + public class CompAbilityEffect_PsychicBeguile : CompAbilityEffect + { + public new CompProperties_PsychicBeguile Props + { + get + { + return (CompProperties_PsychicBeguile)this.props; + } + } + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + if (target.Pawn.Faction != parent.pawn.Faction) + { + target.Pawn.SetFaction(parent.pawn.Faction); + IncidentWorker.SendIncidentLetter(target.Pawn.Name + " beguiled!", parent.pawn.Name + " has used " + parent.pawn.Possessive() + " psychic beguiler to psychically manipulate " + target.Pawn.Name + ". " + target.Pawn.Name + " has become obsessed with " + parent.pawn.Name + " and is joining " + parent.pawn.Possessive() + " faction.", LetterDefOf.PositiveEvent, new IncidentParms(), target.Pawn, IncidentDefOf.WandererJoin); + } + target.Pawn.relations.AddDirectRelation(Props.pawnRelationDef, parent.pawn); + if(target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeComa, out Hediff cubeComa)) + { + target.Pawn.health.RemoveHediff(cubeComa); + } + if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeInterest, out Hediff cubeInterest)) + { + target.Pawn.health.RemoveHediff(cubeInterest); + } + if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeWithdrawal, out Hediff cubeWithdrawal)) + { + target.Pawn.health.RemoveHediff(cubeWithdrawal); + } + if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeRage, out Hediff cubeRage)) + { + target.Pawn.health.RemoveHediff(cubeRage); + } + } + } + + public class LTS_Hediff_ObsessionBerserkOnDeath : HediffWithComps + { + + public override void Notify_PawnCorpseSpawned() + { + base.Notify_PawnCorpseSpawned(); + List allHumanlikeSpawned = pawn.Corpse.Map.mapPawns.AllHumanlikeSpawned; + for (int i = 0; i < allHumanlikeSpawned.Count; i++) + { + Pawn otherPawn = allHumanlikeSpawned[i]; + if (otherPawn.RaceProps.Humanlike && otherPawn.relations.GetDirectRelation(I_DefOf.PsychicBeguileObsessed, pawn) != null) + { + MentalBreakDefOf.BerserkShort.Worker.TryStart(otherPawn, "Target of obsession died", false); + } + } + } + public override void PostAdd(DamageInfo? dinfo) + { + base.PostAdd(dinfo); + RemoveCubeHediffs(pawn); + } + + public void RemoveCubeHediffs(Pawn pawn) + { + if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeComa, out Hediff cubeComa)) + { + pawn.health.RemoveHediff(cubeComa); + } + if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeInterest, out Hediff cubeInterest)) + { + pawn.health.RemoveHediff(cubeInterest); + } + if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeWithdrawal, out Hediff cubeWithdrawal)) + { + pawn.health.RemoveHediff(cubeWithdrawal); + } + if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeRage, out Hediff cubeRage)) + { + pawn.health.RemoveHediff(cubeRage); + } + } + } + + #endregion + + + public class LTS_Hediff_DeathRaiseAsShambler : HediffWithComps + { + //PawnKindDef spawnedPawn = PawnKindDefOf.Metalhorror; + + public override void Notify_PawnDied(DamageInfo? dinfo, Hediff culprit = null) + { + base.Notify_PawnDied(dinfo, culprit); + if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.ShamblerCorpse) == null) + { + //Faction faction; + //if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.ShamblerCorpse) != null) + //{ + // faction = pawn?.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("ScratchDeadlife")) + //} + //else + //{ + // faction = pawn.Faction; + //} + + + Faction faction = dinfo.GetValueOrDefault().Instigator?.Faction ?? pawn.Faction; + if (pawn?.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("DeadlifeCollar")) != null) { faction = pawn.Faction; } + GasUtility.AddDeadifeGas(pawn.Position, pawn.MapHeld, faction, Mathf.CeilToInt(255)); + } + } + } + +} diff --git a/1.5/Assemblies/Implants/Biotech/Gene_Deathrest.cs b/1.5/Assemblies/Implants/Biotech/Gene_Deathrest.cs new file mode 100644 index 0000000..4840382 --- /dev/null +++ b/1.5/Assemblies/Implants/Biotech/Gene_Deathrest.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using UnityEngine; +using Verse; + +namespace Implants.Biotech +{ + [HarmonyPatch(typeof(Gene_Deathrest))] + [HarmonyPatch(nameof(Gene_Deathrest.RemoveOldDeathrestBonuses))] + class Gene_Deathrest_RemoveOldDeathrestBonuses_Patch //offsets the pawn's hemogen capacity by their BaseHemogenOffset stat after reset + { + [HarmonyPostfix] + public static void RemoveOldDeathrestBonusesPostfix(Gene_Deathrest __instance) + { + if (__instance?.pawn?.genes?.GetFirstGeneOfType() != null) + { + __instance.pawn.genes.GetFirstGeneOfType().SetMax(__instance.pawn.genes.GetFirstGeneOfType().Max + __instance.pawn.GetStatValue(StatDef.Named("BaseHemogenOffset"))); + } + } + } + + [HarmonyPatch(typeof(Need_Deathrest))] + [HarmonyPatch(nameof(Need_Deathrest.NeedInterval))] + class Need_Deathrest_NeedInterval_Patch//reduces and increases the time left for and between death rests for the DeathrestApparatus and DeathrestCapacitor respectively + { + [HarmonyPostfix] + public static void NeedIntervalPostfix(Need_Deathrest __instance, Pawn ___pawn) + { + bool IsFrozen = ___pawn.Suspended || (__instance.def.freezeWhileSleeping && !___pawn.Awake()) || (__instance.def.freezeInMentalState && ___pawn.InMentalState); + + if (!IsFrozen) + { + float deathrestingOffset = (((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f)) - 1f) * 0.2f; // + 1.2 0r 1 -1 *0.2 //also total factor = implant factor * gene factor * (___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency ?? 1f) + float notDeathrestingOffset = (1f / 30f); // cancels out base function + + deathrestingOffset += (float)(___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency-0.5) * 0.2f; //-0.5 is an arbritrary, place holder number until I find the correct maths + //Log.Message(___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency); + notDeathrestingOffset += (1 / (___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f)) * (-1f / 30f); // 1/stat*base, so 200% = decrease at half the rate and 50% = decrease at double + + + __instance.CurLevel += (__instance.Deathresting ? deathrestingOffset : notDeathrestingOffset) / 400f; + //__instance.CurLevel += (__instance.Deathresting ? (0.2f * ((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - 1f)) : (((___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f) - 1f) / 30f)) / 400f; + } + } + } + + [HarmonyPatch(typeof(Gene_Deathrest))] + [HarmonyPatch(nameof(Gene_Deathrest.TickDeathresting))] + class Gene_Deathrest_TickDeathresting_patch//makes deathrest hediff go up. and death res need. + { + [HarmonyPostfix] + public static void TickDeathrestingPostfix(bool paused, Gene_Deathrest __instance, Pawn ___pawn, Need_Deathrest ___cachedDeathrestNeed) + { + int everyXTicks = (int)(1 / ((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - 1f)); + if (Find.TickManager.TicksGame % everyXTicks == 0) + { + __instance.deathrestTicks++; + } + } + } + [HarmonyPatch(typeof(Need_Deathrest))] + [HarmonyPatch(nameof(Need_Deathrest.GetTipString))] + class Need_Deathrest_GetTipString_Patch //increases the displayed time left between deathresting if the pawn has a DeathrestCapacitor + { + [HarmonyPostfix] + public static void GetTipStringPostfix(Need_Deathrest __instance, Pawn ___pawn, ref string __result) + { + string text = (__instance.LabelCap + ": " + __instance.CurLevelPercentage.ToStringPercent()).Colorize(ColoredText.TipSectionTitleColor) + "\n"; + if (!__instance.Deathresting) + { + if (__instance.CurLevelPercentage > 0.1f) + { + float num = (__instance.CurLevelPercentage - 0.1f) / (0.033333335f * (1f / ___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f));//multiplies listed time until next deathrest by DeathrestIntervalFactor + text += "NextDeathrestNeed".Translate(___pawn.Named("PAWN"), "PeriodDays".Translate(num.ToString("F1")).Named("DURATION")).Resolve().CapitalizeFirst(); + } + else + { + text += "PawnShouldDeathrestNow".Translate(___pawn.Named("PAWN")).CapitalizeFirst().Colorize(ColorLibrary.RedReadable); + } + text += "\n\n"; + } + __result = text + __instance.def.description; + } + } + + [HarmonyPatch(typeof(SanguophageUtility))] + [HarmonyPatch(nameof(SanguophageUtility.DeathrestJobReport))] + class SanguophageUtility_DeathrestJobReport_Patch //reduces the displayed time left while deathresting if the pawn has a DeathrestApparatus + { + [HarmonyPostfix] + public static void DeathrestJobReportPostfix(Pawn pawn, ref string __result) + { + Hediff_Deathrest hediff_Deathrest = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Deathrest, false) as Hediff_Deathrest; + if (hediff_Deathrest != null && hediff_Deathrest.Paused) + { + __result = "DeathrestPaused".Translate() + ": " + "LethalInjuries".Translate(); + return; + } + Gene_Deathrest firstGeneOfType = pawn.genes.GetFirstGeneOfType(); + TaggedString taggedString = "Deathresting".Translate().CapitalizeFirst() + ": "; + float deathrestPercent = firstGeneOfType.DeathrestPercent; + if (deathrestPercent < 1f) + { + taggedString += Mathf.Min(deathrestPercent, 0.99f).ToStringPercent("F0"); + } + else + { + taggedString += string.Format("{0} - {1}", "Complete".Translate().CapitalizeFirst(), "CanWakeSafely".Translate()); + } + if (deathrestPercent < 1f) + { + //taggedString += ", " + "DurationLeft".Translate((Mathf.RoundToInt(firstGeneOfType.MinDeathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - firstGeneOfType.deathrestTicks)).ToStringTicksToPeriod(true, false, true, true, false)); + //taggedString += ", " + "DurationLeft".Translate((Mathf.RoundToInt(firstGeneOfType.MinDeathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - firstGeneOfType.deathrestTicks)).ToStringTicksToPeriod(true, false, true, true, false)); + + taggedString += ", " + "DurationLeft".Translate((firstGeneOfType.MinDeathrestTicks - (Mathf.RoundToInt(firstGeneOfType.deathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f)))).ToStringTicksToPeriod(true, false, true, true, false)); + + + //Log.Message(pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor"))); + //Log.Message(firstGeneOfType.deathrestTicks); + } + __result = taggedString.Resolve(); + } + } +} diff --git a/1.5/Assemblies/Implants/Biotech/Mechanitor.cs b/1.5/Assemblies/Implants/Biotech/Mechanitor.cs new file mode 100644 index 0000000..ff770b2 --- /dev/null +++ b/1.5/Assemblies/Implants/Biotech/Mechanitor.cs @@ -0,0 +1,557 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI.Group; + +namespace Implants.Biotech +{ + #region Command Range + + [HarmonyPatchCategory("Biotech")] + class BiotechMechanitorPatches + { + [HarmonyPatch(typeof(Pawn_MechanitorTracker))] + [HarmonyPatch(nameof(Pawn_MechanitorTracker.CanCommandTo))] + class + Pawn_MechanitorTracker_CanCommandTo_Patch //increases the mechanitor's range by MechRemoteControlDistanceOffset + { + /// + /// pushed always commandable check to front to reduct compute. + /// TODO perhaps need a custom patch order to make sure this logic always works. + /// + /// target mech to command + /// should be mechanitor, but not always the mechanitor for example like Dead man switch ctrl mechs + /// Commandable result from original code. + [HarmonyPostfix] + public static void CanCommandToPostfix(LocalTargetInfo target, Pawn_MechanitorTracker __instance, + ref bool __result) + { + if (__result) + return; + float SignalBoosterRange = + __instance.Pawn?.GetStatValue(StatDef.Named("MechRemoteControlDistanceOffset")) ?? 0f; + __result = target.Cell.InBounds(__instance.Pawn.MapHeld) && + (float)__instance.Pawn.Position.DistanceToSquared(target.Cell) < + (24.9f + SignalBoosterRange) * + (24.9f + + SignalBoosterRange); //last line should mean that if something else makes it true, then it is(?) + } + } + + [HarmonyPatch(typeof(Pawn_MechanitorTracker))] + [HarmonyPatch(nameof(Pawn_MechanitorTracker.DrawCommandRadius))] + class + Pawn_MechanitorTracker_DrawCommandRadius_Patch //increases the displayed mechanitor range by MechRemoteControlDistanceOffset + { + /// + /// Skip original draw radius using a prefix. + /// TODO may need specify fixed patch order to make sure this works. + /// + /// return false to skip original draw. + [HarmonyPrefix] + static bool DrawCommandRadiusPrefix() + { + return false; + } + + /// + /// Postfix the draw radius by apply our extended radius on top. + /// + /// + [HarmonyPostfix] + public static void DrawCommandRadiusPostfix(Pawn_MechanitorTracker __instance) + { + if (__instance.Pawn.Spawned && __instance.AnySelectedDraftedMechs) + { + //GenDraw.DrawRadiusRing(___pawn.Position, 24.9f + (3f*___pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("SignalBoosterImplant"))?.Severity ?? 0f), Color.white, (IntVec3 c) => __instance.CanCommandTo(c)); + if (!ModsConfig.IsActive("swwu.MechanitorCommandRange") && + !ModsConfig.IsActive( + "Neronix17.TweaksGalore")) //for tweaks galore, it'd be better to try to find the setting specifically, with an inverted result and a null check true + { + IntVec3 position = __instance.Pawn.Position; + float radius = 24.9f + + (__instance.Pawn?.GetStatValue( + StatDef.Named("MechRemoteControlDistanceOffset")) ?? 0f); + //Make our command circle yellow. And make sure this postfix implemented draw follows vanilla impl. + GenDraw.DrawRadiusRing(position, radius, Color.yellow, + (IntVec3 c) => __instance.CanCommandTo((LocalTargetInfo)c)); + } + } + } + } + } + + #endregion + + #region Resurrect + + public class CompProperties_MechanitorResurrectMech : CompProperties_AbilityEffect + { + public CompProperties_MechanitorResurrectMech() + { + this.compClass = typeof(CompAbilityEffect_MechanitorResurrectMech); + } + + public int maxCorpseAgeTicks = int.MaxValue; + + public EffecterDef appliedEffecterDef; + + public EffecterDef resolveEffecterDef; + + //public EffecterDef centerEffecterDef; + } + + public class CompAbilityEffect_MechanitorResurrectMech : CompAbilityEffect + { + public new CompProperties_MechanitorResurrectMech Props + { + get { return (CompProperties_MechanitorResurrectMech)this.props; } + } + + public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest) + { + Corpse corpse; + bool bandwidthCheck = (target.Thing as Corpse).InnerPawn.GetStatValue(StatDef.Named("BandwidthCost")) <= + this.parent.pawn.mechanitor.TotalBandwidth - + this.parent.pawn.mechanitor.UsedBandwidth; + bool canApplyOnCheck = (base.CanApplyOn(target, dest) && target.HasThing && + (corpse = target.Thing as Corpse) != null && this.CanResurrect(corpse) && + bandwidthCheck); + //Log.Message("CanApplyOn check: " + canApplyOnCheck); + + + if ((target.Thing as Corpse).InnerPawn.Faction != this.parent.pawn.Faction) + { + Messages.Message("Can only resurrect allied mechs", (target.Thing as Pawn), + MessageTypeDefOf.NegativeEvent); + } + else if ((target.Thing as Corpse).timeOfDeath <= + Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks) + { + Messages.Message("Target has been dead too long", (target.Thing as Pawn), + MessageTypeDefOf.NegativeEvent); + } + else if (!bandwidthCheck) + { + Messages.Message("Insufficient bandwidth", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); + } + + + return canApplyOnCheck; + } + + + private bool CanResurrect(Corpse corpse) + { + //return corpse.InnerPawn.RaceProps.IsMechanoid && corpse.InnerPawn.RaceProps.mechWeightClass < MechWeightClass.UltraHeavy && corpse.InnerPawn.Faction == this.parent.pawn.Faction && (corpse.InnerPawn.kindDef.abilities == null || !corpse.InnerPawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)) && corpse.timeOfDeath >= Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks; + return corpse.InnerPawn.RaceProps.IsMechanoid && corpse.InnerPawn.Faction == this.parent.pawn.Faction && + (corpse.InnerPawn.kindDef.abilities == null || + !corpse.InnerPawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)) && + corpse.timeOfDeath >= Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks; + } + + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + //Log.Message("Apply called"); + base.Apply(target, dest); + Corpse corpse = (Corpse)target.Thing; + if (!this.CanResurrect(corpse)) + { + return; + } + + Pawn innerPawn = corpse.InnerPawn; + ResurrectionUtility.TryResurrect(innerPawn, null); + if (this.Props.appliedEffecterDef != null) + { + Effecter effecter = this.Props.appliedEffecterDef.SpawnAttached(innerPawn, innerPawn.MapHeld, 1f); + effecter.Trigger(innerPawn, innerPawn, -1); + effecter.Cleanup(); + this.parent.pawn.relations.AddDirectRelation(PawnRelationDefOf.Overseer, + innerPawn); //if resurrection successful, immediately takes control of resurrected mech. + } + + innerPawn.stances.stagger.StaggerFor(60, 0.17f); + } + + public override bool GizmoDisabled(out string reason) + { + reason = null; + return false; + } + + public override IEnumerable CustomWarmupMotes(LocalTargetInfo target) + { + foreach (LocalTargetInfo localTargetInfo in this.parent.GetAffectedTargets(target)) + { + Thing thing = localTargetInfo.Thing; + yield return MoteMaker.MakeAttachedOverlay(thing, ThingDefOf.Mote_MechResurrectWarmupOnTarget, + Vector3.zero, 1f, -1f); + } + + yield break; + } + + public override void PostApplied(List targets, Map map) + { + //Log.Message("PostApplied called"); + Vector3 vector = Vector3.zero; + foreach (LocalTargetInfo localTargetInfo in targets) + { + vector += localTargetInfo.Cell.ToVector3Shifted(); + } + + vector /= (float)targets.Count(); + IntVec3 intVec = vector.ToIntVec3(); + this.Props.resolveEffecterDef.Spawn(intVec, map, 1f).EffectTick(new TargetInfo(intVec, map, false), + new TargetInfo(intVec, map, false)); + } + } + + #endregion + + #region Remote Dominate + + public class CompProperties_MechanitorDominateMech : CompProperties_AbilityEffect + { + public CompProperties_MechanitorDominateMech() + { + this.compClass = typeof(CompAbilityEffect_MechanitorDominateMech); + } + } + + public class CompAbilityEffect_MechanitorDominateMech : CompAbilityEffect + { + public new CompProperties_MechanitorDominateMech Props + { + get { return (CompProperties_MechanitorDominateMech)this.props; } + } + + public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest) + { + Pawn pawn; + + bool bandwidthCheck = (target.Thing as Pawn).GetStatValue(StatDef.Named("BandwidthCost")) <= + this.parent.pawn.mechanitor.TotalBandwidth - + this.parent.pawn.mechanitor.UsedBandwidth; + bool notTempMech = target.Thing.TryGetComp() == null; + bool canApplyOnCheck = (base.CanApplyOn(target, dest) && target.HasThing && + (pawn = target.Thing as Pawn) != null && bandwidthCheck && + this.CanDominate(pawn) && notTempMech); + + + if (!notTempMech) + { + Messages.Message("Cannot target temporary mech", (target.Thing as Pawn), + MessageTypeDefOf.NegativeEvent); + } + else if ((target.Thing as Pawn).RaceProps.mechWeightClass >= MechWeightClass.UltraHeavy) + { + Messages.Message("Cannot target superheavy mech", (target.Thing as Pawn), + MessageTypeDefOf.NegativeEvent); + } + else if (!bandwidthCheck) + { + Messages.Message("Insufficient bandwidth", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); + } + + return canApplyOnCheck; + } + + + private bool CanDominate(Pawn pawn) + { + return pawn.RaceProps.IsMechanoid && pawn.RaceProps.mechWeightClass < MechWeightClass.UltraHeavy && + (pawn.kindDef.abilities == null || + !pawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)); + } + + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + //Log.Message("Apply called"); + base.Apply(target, dest); + Pawn pawn = (Pawn)target; + if (!this.CanDominate(pawn)) + { + return; + } + + + pawn.SetFaction(this.parent.pawn.Faction); //convert pawn + + this.parent.pawn.relations.AddDirectRelation(PawnRelationDefOf.Overseer, pawn); + pawn.stances.stagger.StaggerFor(60, 0.17f); + } + + public override bool GizmoDisabled(out string reason) + { + reason = null; + return false; + } + + //public override IEnumerable CustomWarmupMotes(LocalTargetInfo target) + //{ + // foreach (LocalTargetInfo localTargetInfo in this.parent.GetAffectedTargets(target)) + // { + // Thing thing = localTargetInfo.Thing; + // yield return MoteMaker.MakeAttachedOverlay(thing, ThingDefOf.Mote_MechResurrectWarmupOnTarget, Vector3.zero, 1f, -1f); + // } + // IEnumerator enumerator = null; + // yield break; + // yield break; + //} + + public override void PostApplied(List targets, Map map) + { + //Log.Message("PostApplied called"); + //Vector3 vector = Vector3.zero; + //foreach (LocalTargetInfo localTargetInfo in targets) + //{ + // vector += localTargetInfo.Cell.ToVector3Shifted(); + //} + //vector /= (float)targets.Count(); + //IntVec3 intVec = vector.ToIntVec3(); + //this.Props.resolveEffecterDef.Spawn(intVec, map, 1f).EffectTick(new TargetInfo(intVec, map, false), new TargetInfo(intVec, map, false)); + } + } + + #endregion + + #region Mech carrier + + public class CompProperties_MechanitorMechCarrier : CompProperties_AbilityEffect + { + public CompProperties_MechanitorMechCarrier() + { + this.compClass = typeof(CompAbilityEffect_MechanitorMechCarrier); + } + + public PawnKindDef spawnPawnKind; + public int cooldownTicks = 900; + public int maxPawnsToSpawn = 2; + public EffecterDef spawnEffecter; + public EffecterDef spawnedMechEffecter; + public bool attachSpawnedEffecter; + public bool attachSpawnedMechEffecter; + } + + public class CompAbilityEffect_MechanitorMechCarrier : CompAbilityEffect + { + public new CompProperties_MechanitorMechCarrier Props + { + get { return (CompProperties_MechanitorMechCarrier)this.props; } + } + + public override void CompTick() + { + base.CompTick(); + //if (Find.Selector.IsSelected(parent.pawn) && (int)Find.TickManager.CurTimeSpeed != 0 && Find.TickManager.TicksGame % (int)Find.TickManager.CurTimeSpeed == 0)//if the mechanitor is selected, and once erry 60/1 irl seconds + //{ + // for (int i = 0; i < spawnedPawns.Count; i++) + // { + // if (!spawnedPawns[i].Dead) + // { + // GenDraw.DrawLineBetween(this.parent.pawn.TrueCenter(), spawnedPawns[i].TrueCenter()); + // } + // } + //} + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + TrySpawnPawns(); + } + + public int maxspawn() + { + //Log.Message("RemainingCharges: " + parent.RemainingCharges+1); + int max = parent.RemainingCharges + + 1; //requires +1 to account for the charge that's automatically used upon ability activation, prior to this. + if (max > 2) + { + return 2; + } + else + { + return max; + } + } + + public void TrySpawnPawns() + { + int maxCanSpawn = maxspawn(); + //Log.Message("max spawns: "+ maxCanSpawn); + if (maxCanSpawn <= 0) + { + return; + } + + PawnGenerationRequest pawnGenerationRequest = new PawnGenerationRequest(this.Props.spawnPawnKind, + this.parent.pawn.Faction, PawnGenerationContext.NonPlayer, -1, true, false, false, true, false, 1f, + false, true, false, true, true, false, false, false, false, 0f, 0f, null, 1f, null, null, null, + null, null, null, null, null, null, null, null, null, false, false, false, false, null, null, null, + null, null, 0f, DevelopmentalStage.Newborn, null, null, null, false, false, false, -1, 0, false); + Pawn pawn; + Lord lord = (((pawn = this.parent.pawn as Pawn) != null) ? pawn.GetLord() : null); + for (int i = 0; i < maxCanSpawn; i++) + { + Pawn pawn2 = PawnGenerator.GeneratePawn(pawnGenerationRequest); + GenSpawn.Spawn(pawn2, this.parent.pawn.Position, this.parent.pawn.Map, WipeMode.Vanish); + this.spawnedPawns.Add(pawn2); + if (lord != null) + { + lord.AddPawn(pawn2); + } + + if (this.Props.spawnedMechEffecter != null) + { + Effecter effecter = new Effecter(this.Props.spawnedMechEffecter); + effecter.Trigger( + this.Props.attachSpawnedMechEffecter + ? pawn2 + : new TargetInfo(pawn2.Position, pawn2.Map, false), TargetInfo.Invalid, -1); + effecter.Cleanup(); + } + } + + this.cooldownTicksRemaining = this.Props.cooldownTicks; + if (this.Props.spawnEffecter != null) + { + Effecter effecter2 = new Effecter(this.Props.spawnEffecter); + effecter2.Trigger( + this.Props.attachSpawnedEffecter + ? this.parent.pawn + : new TargetInfo(this.parent.pawn.Position, this.parent.pawn.Map, false), + TargetInfo.Invalid, -1); + effecter2.Cleanup(); + } + + if (maxCanSpawn == 2) //subtract an extra charge, as we're summoning 2 + { + parent.RemainingCharges--; + } + } + + public List GetSpawnedPawns() + { + return spawnedPawns; + } + + private int cooldownTicksRemaining; + private List spawnedPawns = new List(); + public SoundDef soundReload; + } + + public class HediffCompProperties_KillSpawnedPawns : HediffCompProperties + { + public AbilityDef abilityDef; + + public HediffCompProperties_KillSpawnedPawns() + { + compClass = typeof(HediffComp_KillSpawnedPawns); + } + } + + public class HediffComp_KillSpawnedPawns : HediffComp + { + public HediffCompProperties_KillSpawnedPawns Props => (HediffCompProperties_KillSpawnedPawns)props; + + public override void Notify_PawnKilled() + { + foreach (Pawn i in base.Pawn.abilities.GetAbility(Props.abilityDef) + .CompOfType().GetSpawnedPawns()) + { + if (!i.Dead) + { + i.Kill(null, null); + } + } + } + } + + #endregion + + #region Call a cluster + + public class CompProperties_AbilityMechCluster : CompProperties_AbilityEffect + { + public CompProperties_AbilityMechCluster() + { + this.compClass = typeof(CompAbilityEffect_MechCluster); + } + + public float displayRadius; + } + + public class CompAbilityEffect_MechCluster : CompAbilityEffect + { + public new CompProperties_AbilityMechCluster Props + { + get { return (CompProperties_AbilityMechCluster)this.props; } + } + + public bool ShouldHaveInspectString + { + get { return ModsConfig.BiotechActive && this.parent.pawn.RaceProps.IsMechanoid; } + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + if (Faction.OfMechanoids == null) + { + Messages.Message("MessageNoFactionForVerbMechCluster".Translate(), this.parent.pawn, + MessageTypeDefOf.RejectInput, null, false); + } + else + { + MechClusterUtility.SpawnCluster(target.Cell, this.parent.pawn.MapHeld, + MechClusterGenerator.GenerateClusterSketch(2500f, this.parent.pawn.MapHeld, true, true), true, + false, null); + } + } + + public override void PostApplied(List targets, Map map) + { + base.PostApplied(targets, map); + if (this.parent.def.defName == + "MechhiveSatelliteUplink") //add field for cooldownFactorStat. Change this if statement to if it's not null. change the contents of getstatvalue on the next line to that field. + { + this.parent.StartCooldown(Mathf.RoundToInt(this.parent.def.cooldownTicksRange.RandomInRange * + this.parent.pawn?.GetStatValue(StatDef.Named("MechhiveSatelliteUplinkCooldownFactor")) ?? 1f)); + } + } + + public override void DrawEffectPreview(LocalTargetInfo target) + { + GenDraw.DrawRadiusRing(target.Cell, this.Props.displayRadius); + } + + public override string CompInspectStringExtra() + { + if (!this.ShouldHaveInspectString) + { + return null; + } + + if (this.parent.CanCast) + { + return "AbilityMechSmokepopCharged".Translate(); + } + + return "AbilityMechSmokepopRecharging".Translate( + this.parent.CooldownTicksRemaining.ToStringTicksToPeriod(true, false, true, true, false)); + } + } + + #endregion +} \ No newline at end of file diff --git a/1.5/Assemblies/Implants/CaptiveControl.cs b/1.5/Assemblies/Implants/CaptiveControl.cs new file mode 100644 index 0000000..42b9bc6 --- /dev/null +++ b/1.5/Assemblies/Implants/CaptiveControl.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using Verse.Sound; + +namespace Implants +{ + + public class LTS_CompProperties_CaptiveControl : CompProperties_AbilityEffect + { + public LTS_CompProperties_CaptiveControl() + { + this.compClass = typeof(LTS_CompAbilityEffect_CaptiveControl); + } + public HediffDef hediffDef; + public float StartSeverity; + public string location = null; + public int duration = 3600; // 1 hour + public bool headExploder = false; + public bool hediffToggle = false; + } + + public class LTS_CompAbilityEffect_CaptiveControl : CompAbilityEffect + { + public new LTS_CompProperties_CaptiveControl Props + { + get + { + return (LTS_CompProperties_CaptiveControl)this.props; + } + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + + if (target.Pawn != null) + { + if (Props.headExploder) + { + if (EffecterDefOf.MeatExplosion != null) + { + EffecterDefOf.MeatExplosion.Spawn(parent.pawn.PositionHeld, parent.pawn.MapHeld).Cleanup(); + } + SoundDefOf.CocoonDestroyed.PlayOneShot(new TargetInfo(target.Pawn.Position, target.Pawn.Map)); + target.Pawn.TakeDamage(new DamageInfo(DamageDefOf.Crush, 100, 0, -1, null, target.Pawn.health.hediffSet.GetBodyPartRecord(BodyPartDefOf.Head))); + //target.Pawn.TakeDamage(new DamageInfo(DamageDefOf.Bomb, 100, 0, -1, null, target.Pawn.health.hediffSet.GetBodyPartRecord(BodyPartDefOf.Head))); + } + else if (Props.hediffToggle) + { + if (target.Pawn.health?.hediffSet?.GetFirstHediffOfDef(this.Props.hediffDef) != null) + { + target.Pawn.health.RemoveHediff(target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef)); + } + else + { + target.Pawn.health.AddHediff(this.Props.hediffDef, location(target)); + if (target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp() != null) + { + target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp().TryCharge(-0.124f); + } + } + } + else + { + target.Pawn.health.AddHediff(this.Props.hediffDef, location(target)); + if (target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp() != null) + { + target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp().ticksToDisappear = Props.duration; + } + } + } + } + + public BodyPartRecord location(LocalTargetInfo target) + { + if (Props.location == null) { return null; } + + //return target.Pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined).Where(part => part.def.tags.Contains(BodyPartTagDefOf.ManipulationLimbSegment)).ToList()[0]; + return target.Pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined).Where(part => part.def.defName == Props.location).ToList()[0]; + } + } + +} diff --git a/1.5/Assemblies/Implants/Implants.csproj b/1.5/Assemblies/Implants/Implants.csproj index 78e8c6f..6580ffc 100644 --- a/1.5/Assemblies/Implants/Implants.csproj +++ b/1.5/Assemblies/Implants/Implants.csproj @@ -1,68 +1,42 @@ - - - + - Debug - AnyCPU - {A5BB73F5-2B73-4464-9585-5553F3695021} + net472 Library - Properties - Implants - Implants - v4.7.2 - 512 - true + false + Implants + Implants + Copyright © 2024 + 1.0.0.0 + 1.0.0.0 - true - pdbonly - false ..\ - DEBUG;TRACE - prompt - 4 + false + false + false ..\Implants.xml - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - packages\Lib.Harmony.2.3.3\lib\net472\0Harmony.dll - False - + + + + + + False + + + - ..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + ..\..\..\..\..\..\..\SteamLibrary\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False - - - - - - - - - ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll + ..\..\..\..\..\..\..\SteamLibrary\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.dll False - ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + ..\..\..\..\..\..\..\SteamLibrary\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll False - - - - - - - - \ No newline at end of file diff --git a/1.5/Assemblies/Implants/LTS_Implants.cs b/1.5/Assemblies/Implants/LTS_Implants.cs index 565c2ee..46aa25c 100644 --- a/1.5/Assemblies/Implants/LTS_Implants.cs +++ b/1.5/Assemblies/Implants/LTS_Implants.cs @@ -188,9 +188,9 @@ namespace LTS_Implants //if ((recipe.GetModExtension()?.LTS_GenePreventsInstall ?? false) == (pawn?.genes?.HasActiveGene(recipe.GetModExtension()?.LTS_Gene) ?? false))//returns false if needs gene (false) but doesn't have it (false) or gene prevents (true) and has gene (true) List genes = recipe?.GetModExtension()?.LTS_Genes; - if (genes.Count>0) + if (genes.Count > 0) { - for (int i = 0; i <= genes.Count-1; i++) + for (int i = 0; i <= genes.Count - 1; i++) { if ((recipe.GetModExtension()?.LTS_GenePreventsInstall ?? false) == (pawn?.genes?.HasActiveGene(genes[i]) ?? false))//returns false if needs gene (false) but doesn't have it (false) or gene prevents (true) { @@ -198,7 +198,7 @@ namespace LTS_Implants } } } - + //foreach (GeneDef gen in genes) //{ // Log.Message("no issues so far."); @@ -334,226 +334,6 @@ namespace LTS_Implants } } - public class CompProperties_MechanitorResurrectMech : CompProperties_AbilityEffect - { - public CompProperties_MechanitorResurrectMech() - { - this.compClass = typeof(CompAbilityEffect_MechanitorResurrectMech); - } - - public int maxCorpseAgeTicks = int.MaxValue; - - public EffecterDef appliedEffecterDef; - - public EffecterDef resolveEffecterDef; - - //public EffecterDef centerEffecterDef; - } - - public class CompAbilityEffect_MechanitorResurrectMech : CompAbilityEffect - { - public new CompProperties_MechanitorResurrectMech Props - { - get - { - return (CompProperties_MechanitorResurrectMech)this.props; - } - } - - public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest) - { - Corpse corpse; - bool bandwidthCheck = (target.Thing as Corpse).InnerPawn.GetStatValue(StatDef.Named("BandwidthCost")) <= this.parent.pawn.mechanitor.TotalBandwidth - this.parent.pawn.mechanitor.UsedBandwidth; - bool canApplyOnCheck = (base.CanApplyOn(target, dest) && target.HasThing && (corpse = target.Thing as Corpse) != null && this.CanResurrect(corpse) && bandwidthCheck); - //Log.Message("CanApplyOn check: " + canApplyOnCheck); - - - - if ((target.Thing as Corpse).InnerPawn.Faction != this.parent.pawn.Faction) - { - Messages.Message("Can only resurrect allied mechs", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - else if ((target.Thing as Corpse).timeOfDeath <= Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks) - { - Messages.Message("Target has been dead too long", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - else if (!bandwidthCheck) - { - Messages.Message("Insufficient bandwidth", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - - - - - return canApplyOnCheck; - } - - - - private bool CanResurrect(Corpse corpse) - { - //return corpse.InnerPawn.RaceProps.IsMechanoid && corpse.InnerPawn.RaceProps.mechWeightClass < MechWeightClass.UltraHeavy && corpse.InnerPawn.Faction == this.parent.pawn.Faction && (corpse.InnerPawn.kindDef.abilities == null || !corpse.InnerPawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)) && corpse.timeOfDeath >= Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks; - return corpse.InnerPawn.RaceProps.IsMechanoid && corpse.InnerPawn.Faction == this.parent.pawn.Faction && (corpse.InnerPawn.kindDef.abilities == null || !corpse.InnerPawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)) && corpse.timeOfDeath >= Find.TickManager.TicksGame - this.Props.maxCorpseAgeTicks; - } - - - - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - //Log.Message("Apply called"); - base.Apply(target, dest); - Corpse corpse = (Corpse)target.Thing; - if (!this.CanResurrect(corpse)) - { - return; - } - Pawn innerPawn = corpse.InnerPawn; - ResurrectionUtility.TryResurrect(innerPawn, null); - if (this.Props.appliedEffecterDef != null) - { - Effecter effecter = this.Props.appliedEffecterDef.SpawnAttached(innerPawn, innerPawn.MapHeld, 1f); - effecter.Trigger(innerPawn, innerPawn, -1); - effecter.Cleanup(); - this.parent.pawn.relations.AddDirectRelation(PawnRelationDefOf.Overseer, innerPawn);//if resurrection successful, immediately takes control of resurrected mech. - - } - innerPawn.stances.stagger.StaggerFor(60, 0.17f); - } - public override bool GizmoDisabled(out string reason) - { - reason = null; - return false; - } - - public override IEnumerable CustomWarmupMotes(LocalTargetInfo target) - { - foreach (LocalTargetInfo localTargetInfo in this.parent.GetAffectedTargets(target)) - { - Thing thing = localTargetInfo.Thing; - yield return MoteMaker.MakeAttachedOverlay(thing, ThingDefOf.Mote_MechResurrectWarmupOnTarget, Vector3.zero, 1f, -1f); - } - yield break; - } - - public override void PostApplied(List targets, Map map) - { - //Log.Message("PostApplied called"); - Vector3 vector = Vector3.zero; - foreach (LocalTargetInfo localTargetInfo in targets) - { - vector += localTargetInfo.Cell.ToVector3Shifted(); - } - vector /= (float)targets.Count(); - IntVec3 intVec = vector.ToIntVec3(); - this.Props.resolveEffecterDef.Spawn(intVec, map, 1f).EffectTick(new TargetInfo(intVec, map, false), new TargetInfo(intVec, map, false)); - - } - } - - public class CompProperties_MechanitorDominateMech : CompProperties_AbilityEffect - { - public CompProperties_MechanitorDominateMech() - { - this.compClass = typeof(CompAbilityEffect_MechanitorDominateMech); - } - } - - public class CompAbilityEffect_MechanitorDominateMech : CompAbilityEffect - { - public new CompProperties_MechanitorDominateMech Props - { - get - { - return (CompProperties_MechanitorDominateMech)this.props; - } - } - - public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest) - { - Pawn pawn; - - bool bandwidthCheck = (target.Thing as Pawn).GetStatValue(StatDef.Named("BandwidthCost")) <= this.parent.pawn.mechanitor.TotalBandwidth - this.parent.pawn.mechanitor.UsedBandwidth; - bool notTempMech = target.Thing.TryGetComp() == null; - bool canApplyOnCheck = (base.CanApplyOn(target, dest) && target.HasThing && (pawn = target.Thing as Pawn) != null && bandwidthCheck && this.CanDominate(pawn) && notTempMech); - - - if (!notTempMech) - { - Messages.Message("Cannot target temporary mech", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - else if ((target.Thing as Pawn).RaceProps.mechWeightClass >= MechWeightClass.UltraHeavy) - { - Messages.Message("Cannot target superheavy mech", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - else if(!bandwidthCheck) - { - Messages.Message("Insufficient bandwidth", (target.Thing as Pawn), MessageTypeDefOf.NegativeEvent); - } - - return canApplyOnCheck; - } - - - - private bool CanDominate(Pawn pawn) - { - - - - return pawn.RaceProps.IsMechanoid && pawn.RaceProps.mechWeightClass < MechWeightClass.UltraHeavy && (pawn.kindDef.abilities == null || !pawn.kindDef.abilities.Contains(AbilityDefOf.ResurrectionMech)); - } - - - - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - //Log.Message("Apply called"); - base.Apply(target, dest); - Pawn pawn = (Pawn)target; - if (!this.CanDominate(pawn)) - { - return; - } - - - pawn.SetFaction(this.parent.pawn.Faction);//convert pawn - - this.parent.pawn.relations.AddDirectRelation(PawnRelationDefOf.Overseer, pawn); - pawn.stances.stagger.StaggerFor(60, 0.17f); - } - public override bool GizmoDisabled(out string reason) - { - reason = null; - return false; - } - - //public override IEnumerable CustomWarmupMotes(LocalTargetInfo target) - //{ - // foreach (LocalTargetInfo localTargetInfo in this.parent.GetAffectedTargets(target)) - // { - // Thing thing = localTargetInfo.Thing; - // yield return MoteMaker.MakeAttachedOverlay(thing, ThingDefOf.Mote_MechResurrectWarmupOnTarget, Vector3.zero, 1f, -1f); - // } - // IEnumerator enumerator = null; - // yield break; - // yield break; - //} - - public override void PostApplied(List targets, Map map) - { - //Log.Message("PostApplied called"); - //Vector3 vector = Vector3.zero; - //foreach (LocalTargetInfo localTargetInfo in targets) - //{ - // vector += localTargetInfo.Cell.ToVector3Shifted(); - //} - //vector /= (float)targets.Count(); - //IntVec3 intVec = vector.ToIntVec3(); - //this.Props.resolveEffecterDef.Spawn(intVec, map, 1f).EffectTick(new TargetInfo(intVec, map, false), new TargetInfo(intVec, map, false)); - - } - } - //public class CompProperties_MechanitorMechCarrier : CompProperties_AbilityEffect //{ // public CompProperties_MechanitorMechCarrier() @@ -816,129 +596,6 @@ namespace LTS_Implants // } //} - public class CompProperties_MechanitorMechCarrier : CompProperties_AbilityEffect - { - public CompProperties_MechanitorMechCarrier() - { - this.compClass = typeof(CompAbilityEffect_MechanitorMechCarrier); - } - public PawnKindDef spawnPawnKind; - public int cooldownTicks = 900; - public int maxPawnsToSpawn = 2; - public EffecterDef spawnEffecter; - public EffecterDef spawnedMechEffecter; - public bool attachSpawnedEffecter; - public bool attachSpawnedMechEffecter; - } - - public class CompAbilityEffect_MechanitorMechCarrier : CompAbilityEffect - { - public new CompProperties_MechanitorMechCarrier Props - { - get - { - return (CompProperties_MechanitorMechCarrier)this.props; - } - } - public override void CompTick() - { - base.CompTick(); - //if (Find.Selector.IsSelected(parent.pawn) && (int)Find.TickManager.CurTimeSpeed != 0 && Find.TickManager.TicksGame % (int)Find.TickManager.CurTimeSpeed == 0)//if the mechanitor is selected, and once erry 60/1 irl seconds - //{ - // for (int i = 0; i < spawnedPawns.Count; i++) - // { - // if (!spawnedPawns[i].Dead) - // { - // GenDraw.DrawLineBetween(this.parent.pawn.TrueCenter(), spawnedPawns[i].TrueCenter()); - // } - // } - //} - } - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - base.Apply(target, dest); - TrySpawnPawns(); - } - public int maxspawn() - { - //Log.Message("RemainingCharges: " + parent.RemainingCharges+1); - int max = parent.RemainingCharges+1;//requires +1 to account for the charge that's automatically used upon ability activation, prior to this. - if (max > 2) { return 2; } - else { return max; } - } - public void TrySpawnPawns() - { - int maxCanSpawn = maxspawn(); - //Log.Message("max spawns: "+ maxCanSpawn); - if (maxCanSpawn <= 0) - { - return; - } - PawnGenerationRequest pawnGenerationRequest = new PawnGenerationRequest(this.Props.spawnPawnKind, this.parent.pawn.Faction, PawnGenerationContext.NonPlayer, -1, true, false, false, true, false, 1f, false, true, false, true, true, false, false, false, false, 0f, 0f, null, 1f, null, null, null, null, null, null, null, null, null, null, null, null, false, false, false, false, null, null, null, null, null, 0f, DevelopmentalStage.Newborn, null, null, null, false, false, false, -1, 0, false); - Pawn pawn; - Lord lord = (((pawn = this.parent.pawn as Pawn) != null) ? pawn.GetLord() : null); - for (int i = 0; i < maxCanSpawn; i++) - { - Pawn pawn2 = PawnGenerator.GeneratePawn(pawnGenerationRequest); - GenSpawn.Spawn(pawn2, this.parent.pawn.Position, this.parent.pawn.Map, WipeMode.Vanish); - this.spawnedPawns.Add(pawn2); - if (lord != null) - { - lord.AddPawn(pawn2); - } - if (this.Props.spawnedMechEffecter != null) - { - Effecter effecter = new Effecter(this.Props.spawnedMechEffecter); - effecter.Trigger(this.Props.attachSpawnedMechEffecter ? pawn2 : new TargetInfo(pawn2.Position, pawn2.Map, false), TargetInfo.Invalid, -1); - effecter.Cleanup(); - } - } - this.cooldownTicksRemaining = this.Props.cooldownTicks; - if (this.Props.spawnEffecter != null) - { - Effecter effecter2 = new Effecter(this.Props.spawnEffecter); - effecter2.Trigger(this.Props.attachSpawnedEffecter ? this.parent.pawn : new TargetInfo(this.parent.pawn.Position, this.parent.pawn.Map, false), TargetInfo.Invalid, -1); - effecter2.Cleanup(); - } - if (maxCanSpawn == 2)//subtract an extra charge, as we're summoning 2 - { - parent.RemainingCharges--; - } - } - public List GetSpawnedPawns() - { - return spawnedPawns; - } - private int cooldownTicksRemaining; - private List spawnedPawns = new List(); - public SoundDef soundReload; - } - - public class HediffCompProperties_KillSpawnedPawns : HediffCompProperties - { - public AbilityDef abilityDef; - public HediffCompProperties_KillSpawnedPawns() - { - compClass = typeof(HediffComp_KillSpawnedPawns); - } - } - - public class HediffComp_KillSpawnedPawns : HediffComp - { - public HediffCompProperties_KillSpawnedPawns Props => (HediffCompProperties_KillSpawnedPawns)props; - - public override void Notify_PawnKilled() - { - foreach (Pawn i in base.Pawn.abilities.GetAbility(Props.abilityDef).CompOfType().GetSpawnedPawns()) - { - if (!i.Dead) - { - i.Kill(null, null); - } - } - } - } - //public class Command_AbilityReloadable : Command_Ability //{ // public Command_AbilityReloadable(Ability ability, Pawn pawn) : base(ability, pawn) @@ -1124,11 +781,11 @@ namespace LTS_Implants if (this.I_ArchicHaloMote != null) // if a halo exists { exactRotation = I_ArchicHaloMote.exactRotation; - + if (parent.pawn.Rotation != PreviousRotation) //if the pawn's changed direction { - - + + I_ArchicHaloMoteDef.mote.fadeInTime = 0.2f; //this.I_ArchicHaloMote.Destroy(); I_ArchicHaloMote.def.mote.fadeOutTime = 0.2f; @@ -1138,7 +795,7 @@ namespace LTS_Implants this.I_ArchicHaloMote = MoteMaker.MakeAttachedOverlay(parent.pawn, I_ArchicHaloMoteDef, Vector3.zero - parent.pawn.Rotation.FacingCell.ToVector3() * 0.05f + RotationOffset, 1f, -1f); //Vec3(vetrtical), scale, existence override. - + @@ -1153,7 +810,7 @@ namespace LTS_Implants this.I_ArchicHaloMote.Maintain(); } - + //this.I_ArchicHaloMote.rotationRate = 1f; //this.I_ArchicHaloMote.Rotation.Rotate(RotationDirection.Clockwise); I_ArchicHaloMote.exactRotation += 0.2f; @@ -1176,7 +833,7 @@ namespace LTS_Implants } } - public class LTS_CompProperties_ToggleHediff : CompProperties_AbilityEffect + public class LTS_CompProperties_ToggleHediff : CompProperties_AbilityEffect { public LTS_CompProperties_ToggleHediff() { @@ -1277,7 +934,7 @@ namespace LTS_Implants - + } } @@ -1305,10 +962,10 @@ namespace LTS_Implants public List fleshbeastSpawnList = new List(); public bool firstWaveNotGenerated = true; - - - - + + + + public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); @@ -1432,7 +1089,7 @@ namespace LTS_Implants } } - public class LTS_HediffComp_PsychicPainFeedbackLoop : HediffComp + public class LTS_HediffComp_PsychicPainFeedbackLoop : HediffComp { public new HediffCompProperties_PsychicPainFeedbackLoop Props { @@ -1539,7 +1196,7 @@ namespace LTS_Implants } if (!pawn.Downed) { - EyeBrightness = Severity-1f; + EyeBrightness = Severity - 1f; } else EyeBrightness = 0f; mote.instanceColor = new Color(1f, 1f, 1f, EyeBrightness); @@ -1568,7 +1225,7 @@ namespace LTS_Implants } } } - } + } } public class LTS_Hediff_OnRemovalSpawner : HediffWithComps @@ -1599,7 +1256,7 @@ namespace LTS_Implants DoEmergingEffects(); - + if (pawn.Dead) { //Find.LetterStack.ReceiveLetter(LetterMaker.MakeLetter("Metalhorror emerging", "The death of " + pawn.NameShortColored + " has allowed " + pawn.Possessive() + " metalhorror symbiont to tear it's way out of " + pawn.Possessive() + " corpse. Free of " + pawn.NameShortColored + "'s control and full of fury, it will attack anyone it sees.", LetterDefOf.ThreatBig, pawn)); @@ -1631,33 +1288,6 @@ namespace LTS_Implants } } } - - public class LTS_Hediff_DeathRaiseAsShambler : HediffWithComps - { - //PawnKindDef spawnedPawn = PawnKindDefOf.Metalhorror; - - public override void Notify_PawnDied(DamageInfo? dinfo, Hediff culprit = null) - { - base.Notify_PawnDied(dinfo, culprit); - if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.ShamblerCorpse) == null) - { - //Faction faction; - //if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.ShamblerCorpse) != null) - //{ - // faction = pawn?.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("ScratchDeadlife")) - //} - //else - //{ - // faction = pawn.Faction; - //} - - - Faction faction = dinfo.GetValueOrDefault().Instigator?.Faction ?? pawn.Faction; - if (pawn?.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("DeadlifeCollar")) != null) { faction = pawn.Faction; } - GasUtility.AddDeadifeGas(pawn.Position, pawn.MapHeld, faction, Mathf.CeilToInt(255)); - } - } - } public class LTS_Hediff_HeadFitter : HediffWithComps //on creation: get hair and head type, then set them to bald and narrow. on removal, set hair type to orignal (null check, check this works for newly spawning ghouls). Deep save. don't forget to null check due to xenobionic patcher { @@ -1873,172 +1503,6 @@ namespace LTS_Implants } } - public class CompProperties_PsychicBeguile : CompProperties_AbilityEffect - { - public CompProperties_PsychicBeguile() - { - this.compClass = typeof(CompAbilityEffect_PsychicBeguile); - } - public PawnRelationDef pawnRelationDef; - } - - public class CompAbilityEffect_PsychicBeguile : CompAbilityEffect - { - public new CompProperties_PsychicBeguile Props - { - get - { - return (CompProperties_PsychicBeguile)this.props; - } - } - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - base.Apply(target, dest); - if (target.Pawn.Faction != parent.pawn.Faction) - { - target.Pawn.SetFaction(parent.pawn.Faction); - IncidentWorker.SendIncidentLetter(target.Pawn.Name + " beguiled!", parent.pawn.Name + " has used " + parent.pawn.Possessive() + " psychic beguiler to psychically manipulate " + target.Pawn.Name + ". " + target.Pawn.Name + " has become obsessed with " + parent.pawn.Name + " and is joining " + parent.pawn.Possessive() + " faction.", LetterDefOf.PositiveEvent, new IncidentParms(), target.Pawn, IncidentDefOf.WandererJoin); - } - target.Pawn.relations.AddDirectRelation(Props.pawnRelationDef, parent.pawn); - if(target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeComa, out Hediff cubeComa)) - { - target.Pawn.health.RemoveHediff(cubeComa); - } - if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeInterest, out Hediff cubeInterest)) - { - target.Pawn.health.RemoveHediff(cubeInterest); - } - if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeWithdrawal, out Hediff cubeWithdrawal)) - { - target.Pawn.health.RemoveHediff(cubeWithdrawal); - } - if (target.Pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeRage, out Hediff cubeRage)) - { - target.Pawn.health.RemoveHediff(cubeRage); - } - } - } - - public class LTS_Hediff_ObsessionBerserkOnDeath : HediffWithComps - { - - public override void Notify_PawnCorpseSpawned() - { - base.Notify_PawnCorpseSpawned(); - List allHumanlikeSpawned = pawn.Corpse.Map.mapPawns.AllHumanlikeSpawned; - for (int i = 0; i < allHumanlikeSpawned.Count; i++) - { - Pawn otherPawn = allHumanlikeSpawned[i]; - if (otherPawn.RaceProps.Humanlike && otherPawn.relations.GetDirectRelation(I_DefOf.PsychicBeguileObsessed, pawn) != null) - { - MentalBreakDefOf.BerserkShort.Worker.TryStart(otherPawn, "Target of obsession died", false); - } - } - } - public override void PostAdd(DamageInfo? dinfo) - { - base.PostAdd(dinfo); - RemoveCubeHediffs(pawn); - } - - public void RemoveCubeHediffs(Pawn pawn) - { - if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeComa, out Hediff cubeComa)) - { - pawn.health.RemoveHediff(cubeComa); - } - if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeInterest, out Hediff cubeInterest)) - { - pawn.health.RemoveHediff(cubeInterest); - } - if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeWithdrawal, out Hediff cubeWithdrawal)) - { - pawn.health.RemoveHediff(cubeWithdrawal); - } - if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.CubeRage, out Hediff cubeRage)) - { - pawn.health.RemoveHediff(cubeRage); - } - } - } - - public class LTS_Hediff_HyperAdrenalineGland : Hediff - { - private float totalDamageTaken; - - public override void Notify_PawnPostApplyDamage(DamageInfo dinfo, float totalDamageDealt) - { - base.Notify_PawnPostApplyDamage(dinfo, totalDamageDealt); - if (pawn.Dead) - { - return; - } - //if (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("PsychokeneticShield")) != null && ((pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("PsychokeneticShield"))) as LTS_ShieldHediff).PsychicShieldCurrentHealth > 0) - //{ - // return; - //} - totalDamageTaken += totalDamageDealt; - if (!pawn.Dead && totalDamageTaken > 0f && !pawn.health.hediffSet.HasHediff(HediffDefOf.RageSpeed) && !pawn.health.Downed) - { - pawn.health.AddHediff(HediffMaker.MakeHediff(HediffDefOf.RageSpeed, pawn)); - if (pawn.Spawned) - { - EffecterDefOf.ChimeraRage.Spawn(pawn.Position, pawn.Map).Cleanup(); - } - } - } - - public override void Notify_Downed() - { - Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.RageSpeed); - if (firstHediffOfDef != null) - { - pawn.health.RemoveHediff(firstHediffOfDef); - } - } - - public override void Tick() - { - base.Tick(); - if (!pawn.Dead && pawn.health.summaryHealth.SummaryHealthPercent >= 0.98f) - { - Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.RageSpeed); - if (firstHediffOfDef != null) - { - pawn.health.RemoveHediff(firstHediffOfDef); - totalDamageTaken = 0f; - } - } - } - - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref totalDamageTaken, "totalDamageTaken", 0f); - } - } - - public class LTS_Hediff_DefensiveImpaler : Hediff - { - public override void Notify_PawnPostApplyDamage(DamageInfo dinfo, float totalDamageDealt) - { - base.Notify_PawnPostApplyDamage(dinfo, totalDamageDealt); - if (pawn.Dead) - { - return; - } - if (dinfo.Instigator != null && pawn.Position.InHorDistOf(dinfo.Instigator.Position, 1.5f))//attacker next to user //apply 6 stab damage, 20% penetration - { - //SoundDefOf..PlayOneShot(pawn); - //BattleLogEntry_DamageTaken battleLogEntry_DamageTaken = new BattleLogEntry_DamageTaken(pawn, RulePackDefOf.DamageEvent_UnnaturalDarkness); - //Find.BattleLog.Add(battleLogEntry_DamageTaken); - //dinfo.Instigator.TakeDamage(new DamageInfo(DamageDefOf.Stab, 6)).AssociateWithLog(battleLogEntry_DamageTaken); - dinfo.Instigator.TakeDamage(new DamageInfo(DamageDefOf.Stab, 6)); - - } - } - } - public class LTS_HediffCompProperties_HediffApparel : HediffCompProperties { public HediffDef maleHediffDef; @@ -2162,8 +1626,8 @@ namespace LTS_Implants thing.TryGetComp().StartWick(); //DamageInfo triggerdamage = new DamageInfo(); //triggerdamage.SetAmount(50); - if (thing!=null) { thing.TakeDamage(new DamageInfo(DamageDefOf.Bomb, 100)); } - + if (thing != null) { thing.TakeDamage(new DamageInfo(DamageDefOf.Bomb, 100)); } + //thing.TryGetComp().wickTicksLeft = -1; //thing.TryGetComp().StopWick(); @@ -2362,7 +1826,7 @@ namespace LTS_Implants } pawn.Drawer.renderer.SetAllGraphicsDirty(); } - + public override void Notify_Spawned() { @@ -2417,85 +1881,9 @@ namespace LTS_Implants // } //} } - - public class LTS_CompProperties_CaptiveControl : CompProperties_AbilityEffect - { - public LTS_CompProperties_CaptiveControl() - { - this.compClass = typeof(LTS_CompAbilityEffect_CaptiveControl); - } - public HediffDef hediffDef; - public float StartSeverity; - public string location = null; - public int duration = 3600; // 1 hour - public bool headExploder = false; - public bool hediffToggle = false; - } - - public class LTS_CompAbilityEffect_CaptiveControl : CompAbilityEffect - { - public new LTS_CompProperties_CaptiveControl Props - { - get - { - return (LTS_CompProperties_CaptiveControl)this.props; - } - } - - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - base.Apply(target, dest); - - if (target.Pawn != null) - { - if (Props.headExploder) - { - if (EffecterDefOf.MeatExplosion != null) - { - EffecterDefOf.MeatExplosion.Spawn(parent.pawn.PositionHeld, parent.pawn.MapHeld).Cleanup(); - } - SoundDefOf.CocoonDestroyed.PlayOneShot(new TargetInfo(target.Pawn.Position, target.Pawn.Map)); - target.Pawn.TakeDamage(new DamageInfo(DamageDefOf.Crush, 100, 0, -1, null, target.Pawn.health.hediffSet.GetBodyPartRecord(BodyPartDefOf.Head))); - //target.Pawn.TakeDamage(new DamageInfo(DamageDefOf.Bomb, 100, 0, -1, null, target.Pawn.health.hediffSet.GetBodyPartRecord(BodyPartDefOf.Head))); - } - else if (Props.hediffToggle) - { - if (target.Pawn.health?.hediffSet?.GetFirstHediffOfDef(this.Props.hediffDef) != null) - { - target.Pawn.health.RemoveHediff(target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef)); - } - else - { - target.Pawn.health.AddHediff(this.Props.hediffDef, location(target)); - if (target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp() != null) - { - target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp().TryCharge(-0.124f); - } - } - } - else - { - target.Pawn.health.AddHediff(this.Props.hediffDef, location(target)); - if (target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp() != null) - { - target.Pawn.health.hediffSet.GetFirstHediffOfDef(this.Props.hediffDef).TryGetComp().ticksToDisappear = Props.duration; - } - } - } - } - - public BodyPartRecord location(LocalTargetInfo target) - { - if (Props.location == null) { return null; } - - //return target.Pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined).Where(part => part.def.tags.Contains(BodyPartTagDefOf.ManipulationLimbSegment)).ToList()[0]; - return target.Pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined).Where(part => part.def.defName == Props.location).ToList()[0]; - } - } - public class LTS_Hediff_PsychicSustainer : Hediff { - + public override void Tick() { base.Tick(); @@ -2749,10 +2137,6 @@ namespace LTS_Implants { return RefuelWorkGiverUtility.FindEnoughReservableThings(parent.pawn, parent.pawn.Position, new IntRange(Props.ammoCountPerCharge, ammoCountToRefill), (Thing ammo) => ammo.def == Props.ammoDef); } - - - - } //public class LTS_JobDriver_ReloadAbility : JobDriver @@ -2852,7 +2236,7 @@ namespace LTS_Implants for (int i = 0; i < pawn.abilities.AllAbilitiesForReading.Count; i++) { Ability ability = pawn.abilities.AllAbilitiesForReading[i]; - + if (ability.comps != null) { for (int j = 0; j < ability.comps.Count; j++) @@ -2863,7 +2247,7 @@ namespace LTS_Implants } } } - + } return null; } @@ -2983,7 +2367,7 @@ namespace LTS_Implants for (int i = 0; i < pawn.abilities.AllAbilitiesForReading.Count; i++) { Ability ability = pawn.abilities.AllAbilitiesForReading[i]; - if (ability.comps!=null) + if (ability.comps != null) { for (int j = 0; j < ability.comps.Count; j++) { @@ -3004,7 +2388,7 @@ namespace LTS_Implants } } } - + if (comp != null) { break; @@ -3103,7 +2487,7 @@ namespace LTS_Implants { block.SetColor(ShaderPropertyIDs.Color, off); } - else if (node.hediff.pawn.HostileTo(Faction.OfPlayer) || node.hediff.pawn.Drafted || (node.hediff.pawn.MentalStateDef?.IsAggro?? false)) + else if (node.hediff.pawn.HostileTo(Faction.OfPlayer) || node.hediff.pawn.Drafted || (node.hediff.pawn.MentalStateDef?.IsAggro ?? false)) { block.SetColor(ShaderPropertyIDs.Color, aggressive); } @@ -3119,9 +2503,9 @@ namespace LTS_Implants public override void EditMaterialPropertyBlock(PawnRenderNode node, Material material, PawnDrawParms parms, ref MaterialPropertyBlock block) { - if ((node?.hediff?.pawn?.Dead ?? false)||!(node?.hediff?.pawn?.Awake() ?? false)) + if ((node?.hediff?.pawn?.Dead ?? false) || !(node?.hediff?.pawn?.Awake() ?? false)) { - block.SetColor(ShaderPropertyIDs.Color, new Color(0,0,0,0)); + block.SetColor(ShaderPropertyIDs.Color, new Color(0, 0, 0, 0)); } else { @@ -3129,7 +2513,7 @@ namespace LTS_Implants } } } - + public class LTS_PawnRenderSubWorker_ShifttFrontForHeadType : PawnRenderSubWorker { @@ -3157,19 +2541,19 @@ namespace LTS_Implants { return GraphicDatabase.Get(node.hediff.def.GetModExtension().LTS_TexPathThin, node.ShaderFor(node.hediff.pawn), Vector2.one, Color.white); } - else if(node.hediff.pawn.story.bodyType == BodyTypeDefOf.Hulk) + else if (node.hediff.pawn.story.bodyType == BodyTypeDefOf.Hulk) { return GraphicDatabase.Get(node.hediff.def.GetModExtension().LTS_TexPathHulk, node.ShaderFor(node.hediff.pawn), Vector2.one, Color.white); } - else if(node.hediff.pawn.story.bodyType == BodyTypeDefOf.Fat) + else if (node.hediff.pawn.story.bodyType == BodyTypeDefOf.Fat) { return GraphicDatabase.Get(node.hediff.def.GetModExtension().LTS_TexPathFat, node.ShaderFor(node.hediff.pawn), Vector2.one, Color.white); } - else if(node.hediff.pawn.story.bodyType == BodyTypeDefOf.Male) + else if (node.hediff.pawn.story.bodyType == BodyTypeDefOf.Male) { return GraphicDatabase.Get(node.hediff.def.GetModExtension().LTS_TexPathMale, node.ShaderFor(node.hediff.pawn), Vector2.one, Color.white); } - else if(node.hediff.pawn.story.bodyType == BodyTypeDefOf.Female) + else if (node.hediff.pawn.story.bodyType == BodyTypeDefOf.Female) { return GraphicDatabase.Get(node.hediff.def.GetModExtension().LTS_TexPathFemale, node.ShaderFor(node.hediff.pawn), Vector2.one, Color.white); } @@ -3205,7 +2589,7 @@ namespace LTS_Implants Pawn pawn = parent.pawn; Hediff hediff; - + if ((hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef)) != null) { @@ -3270,7 +2654,7 @@ namespace LTS_Implants int cooldown = parent?.CooldownTicksTotal ?? Props.cooldown; //use this ability's maximum cooldown try { - parent.pawn.abilities.GetAbility(Props.abilityDef,true).StartCooldown(cooldown); //put linked ability on cooldown + parent.pawn.abilities.GetAbility(Props.abilityDef, true).StartCooldown(cooldown); //put linked ability on cooldown //Log.Message("Ability '" + parent.def.label + "' is linked to ability '" + Props.abilityDef.label + "' which should be on cooldown for " + cooldown + " ticks"); } catch @@ -3322,108 +2706,6 @@ namespace LTS_Implants } - public class LTS_Hediff_PsychicReaper : Hediff - { - private int previousHumanKills = -1; - - public override void PostAdd(DamageInfo? dinfo) - { - base.PostAdd(dinfo); - previousHumanKills = (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes); - } - - public override void Notify_Spawned() - { - base.Notify_Spawned(); - PostAdd(null); - } - - public override void Tick() - { - base.Tick(); - //Log.Message("Psychic Reaper Tick"); - if (Find.TickManager.TicksGame % 10 == 0) - { - if ((int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes) > previousHumanKills) - { - //Log.Message("Previous kills: " + previousHumanKills); - //Log.Message("Current kills: "+ (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes)); - pawn.psychicEntropy.OffsetPsyfocusDirectly(0.05f*((int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes) - previousHumanKills));//add 5 psyfocus per humanlike kill - } - previousHumanKills = (int)pawn.records.GetValue(RecordDefOf.KillsHumanlikes); - } - } - } - - public class LTS_Hediff_Voidlink : Hediff - { - public override bool ShouldRemove => false; - public override void Tick() - { - base.Tick(); - if (Find.TickManager.TicksGame % 30 == 0) - { - Severity = Find.Anomaly.LevelDef.level; - } - } - } - - public class LTS_HediffCompProperties_MetalhorrorEmerge : HediffCompProperties - { - public string letterLabel; - - public string letterText; - - public LTS_HediffCompProperties_MetalhorrorEmerge() - { - compClass = typeof(LTS_HediffComp_MetalhorrorEmerge); - } - } - - public class LTS_HediffComp_MetalhorrorEmerge : HediffComp - { - private static readonly IntRange StunDuration = new IntRange(120, 240); - - public LTS_HediffCompProperties_MetalhorrorEmerge Props => (LTS_HediffCompProperties_MetalhorrorEmerge)props; - - public override void Notify_SurgicallyRemoved(Pawn surgeon) - { - TentacleAttack(surgeon); - } - - public override void Notify_SurgicallyReplaced(Pawn surgeon) - { - TentacleAttack(surgeon); - } - - private void TentacleAttack(Pawn surgeon) - { - if (ModsConfig.AnomalyActive) - { - Pawn pawn = parent.pawn; - Pawn pawn2 = PawnGenerator.GeneratePawn(new PawnGenerationRequest(PawnKindDefOf.Metalhorror, Faction.OfEntities, PawnGenerationContext.NonPlayer, -1, forceGenerateNewPawn: false, allowDead: false, allowDowned: false, canGeneratePawnRelations: true, mustBeCapableOfViolence: false, 1f, forceAddFreeWarmLayerIfNeeded: false, allowGay: true, allowPregnant: false, allowFood: true, allowAddictions: true, inhabitant: false, certainlyBeenInCryptosleep: false, forceRedressWorldPawnIfFormerColonist: false, worldPawnFactionDoesntMatter: false, 0f, 0f, null, 1f, null, null, null, null, null, 0f, 0f)); - GenSpawn.Spawn(pawn2, CellFinder.StandableCellNear(pawn.Position, pawn.Map, 2f), pawn.Map); - pawn2.stances.stunner.StunFor(StunDuration.RandomInRange, surgeon); - CompInspectStringEmergence compInspectStringEmergence = pawn2.TryGetComp(); - if (compInspectStringEmergence != null) - { - compInspectStringEmergence.sourcePawn = pawn; - } - TaggedString label = Props.letterLabel.Formatted(pawn.Named("PAWN")); - TaggedString text = Props.letterText.Formatted(pawn.Named("PAWN")); - Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.ThreatBig, pawn2); - } - } - } - - - - - - - - - public class LTS_IModExtension : DefModExtension { public int LTS_TicksBetweenPulse; @@ -3465,40 +2747,6 @@ namespace LTS_Implants /// /// Bootstrap class to do the harmony patches. /// - [StaticConstructorOnStartup] - public static class HarmonyPatches - { - static HarmonyPatches() - { - Harmony harmony = new Harmony("rimworld.LTS.implants"); - Harmony.DEBUG = false; - harmony.PatchAll(); -#if DEBUG - foreach (var method in harmony.GetPatchedMethods()) - { - Verse.Log.Message($"[LTS Implants]Patched Method {method.Name}"); - var patchinfo = Harmony.GetPatchInfo(method); - foreach (var VARIABLE in patchinfo.Owners) - { - Verse.Log.Message("The Method has been patched by:"+VARIABLE); - } - foreach (var VARIABLE in patchinfo.Prefixes) - { - Verse.Log.Message("has Prefix:"+VARIABLE.PatchMethod); - } - foreach (var VARIABLE in patchinfo.Postfixes) - { - Verse.Log.Message("has Postfix:"+VARIABLE.PatchMethod); - } - foreach (var VARIABLE in patchinfo.Transpilers) - { - Verse.Log.Message("has Transpiler:"+VARIABLE.PatchMethod); - } - Verse.Log.Message("Displaying next method"); - } -#endif - } - } [HarmonyPatch(typeof(StatPart_FertilityByGenderAge), "AgeFactor")] class StatPart_FertilityByGenderAge_AgeFactor_Patch { @@ -3506,7 +2754,7 @@ namespace LTS_Implants public static void StatPart_FertilityByGenderAge_AgeFactor_Postfix(Pawn pawn, ref float __result) { //if (pawn.gender == Gender.Female) - __result = 1-((1- __result) * pawn.GetStatValue(StatDef.Named("LTS_AgeFertilityImpactFactor"))); + __result = 1 - ((1 - __result) * pawn.GetStatValue(StatDef.Named("LTS_AgeFertilityImpactFactor"))); // e.g.: // @@ -3953,7 +3201,7 @@ namespace LTS_Implants { if (pawn.GetStatValue(StatDef.Named("LTS_DarkVision")) != 0) { - + __result = 14f * pawn.health.capacities.GetLevel(PawnCapacityDefOf.Sight); } } @@ -4074,7 +3322,7 @@ namespace LTS_Implants // [HarmonyPostfix] // public static void Hediff_PostAdd_Postfix(DamageInfo? dinfo, Hediff __instance) // { - + // if (__instance.def == HediffDefOf.DeathRefusalSickness && __instance.pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("MortalCollar")) != null) // { @@ -4148,7 +3396,7 @@ namespace LTS_Implants __result = (int)(__result / __instance.DigestingPawn.health.FactorForDamage(new DamageInfo(DamageDefOf.AcidBurn, 1, 0))); //should multiply the time it takes to digest a pawn by 1/(acid damage they take%) } } - + //[HarmonyPatch(typeof(Pawn_GeneTracker), "AffectedByDarkness", MethodType.Getter)] //class Pawn_GeneTracker_AffectedByDarkness_Patch //if pawn has something that should give them night vision, give them night vision. //{ @@ -4391,188 +3639,6 @@ namespace LTS_Implants // } //} - [HarmonyPatch(typeof(Pawn_MechanitorTracker))] - [HarmonyPatch(nameof(Pawn_MechanitorTracker.CanCommandTo))] - class Pawn_MechanitorTracker_CanCommandTo_Patch //increases the mechanitor's range by MechRemoteControlDistanceOffset - { - /// - /// pushed always commandable check to front to reduct compute. - /// TODO perhaps need a custom patch order to make sure this logic always works. - /// - /// target mech to command - /// should be mechanitor, but not always the mechanitor for example like Dead man switch ctrl mechs - /// Commandable result from original code. - [HarmonyPostfix] - public static void CanCommandToPostfix(LocalTargetInfo target, Pawn_MechanitorTracker __instance, ref bool __result) - { - if (__result) - return; - float SignalBoosterRange = __instance.Pawn?.GetStatValue(StatDef.Named("MechRemoteControlDistanceOffset")) ?? 0f; - __result = target.Cell.InBounds(__instance.Pawn.MapHeld) && (float)__instance.Pawn.Position.DistanceToSquared(target.Cell) < (24.9f + SignalBoosterRange) * (24.9f + SignalBoosterRange);//last line should mean that if something else makes it true, then it is(?) - } - } - - [HarmonyPatch(typeof(Pawn_MechanitorTracker))] - [HarmonyPatch(nameof(Pawn_MechanitorTracker.DrawCommandRadius))] - class Pawn_MechanitorTracker_DrawCommandRadius_Patch //increases the displayed mechanitor range by MechRemoteControlDistanceOffset - { - /// - /// Skip original draw radius using a prefix. - /// TODO may need specify fixed patch order to make sure this works. - /// - /// return false to skip original draw. - [HarmonyPrefix] - static bool DrawCommandRadiusPrefix() - { - return false; - } - /// - /// Postfix the draw radius by apply our extended radius on top. - /// - /// - [HarmonyPostfix] - public static void DrawCommandRadiusPostfix(Pawn_MechanitorTracker __instance) - { - - if (__instance.Pawn.Spawned && __instance.AnySelectedDraftedMechs) - { - //GenDraw.DrawRadiusRing(___pawn.Position, 24.9f + (3f*___pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("SignalBoosterImplant"))?.Severity ?? 0f), Color.white, (IntVec3 c) => __instance.CanCommandTo(c)); - if (!ModsConfig.IsActive("swwu.MechanitorCommandRange") && !ModsConfig.IsActive("Neronix17.TweaksGalore")) //for tweaks galore, it'd be better to try to find the setting specifically, with an inverted result and a null check true - { - IntVec3 position = __instance.Pawn.Position; - float radius = 24.9f + (__instance.Pawn?.GetStatValue(StatDef.Named("MechRemoteControlDistanceOffset")) ?? 0f); - MoteMaker.ThrowText(); - //Make our command circle yellow. And make sure this postfix implemented draw follows vanilla impl. - GenDraw.DrawRadiusRing(position, radius, Color.yellow,(IntVec3 c) => __instance.CanCommandTo((LocalTargetInfo)c)); - } - - } - } - } - - [HarmonyPatch(typeof(Gene_Deathrest))] - [HarmonyPatch(nameof(Gene_Deathrest.RemoveOldDeathrestBonuses))] - class Gene_Deathrest_RemoveOldDeathrestBonuses_Patch //offsets the pawn's hemogen capacity by their BaseHemogenOffset stat after reset - { - [HarmonyPostfix] - public static void RemoveOldDeathrestBonusesPostfix(Gene_Deathrest __instance) - { - if (__instance?.pawn?.genes?.GetFirstGeneOfType() != null) - { - __instance.pawn.genes.GetFirstGeneOfType().SetMax(__instance.pawn.genes.GetFirstGeneOfType().Max + __instance.pawn.GetStatValue(StatDef.Named("BaseHemogenOffset"))); - } - } - } - - [HarmonyPatch(typeof(Need_Deathrest))] - [HarmonyPatch(nameof(Need_Deathrest.NeedInterval))] - class Need_Deathrest_NeedInterval_Patch//reduces and increases the time left for and between death rests for the DeathrestApparatus and DeathrestCapacitor respectively - { - [HarmonyPostfix] - public static void NeedIntervalPostfix(Need_Deathrest __instance, Pawn ___pawn) - { - bool IsFrozen = ___pawn.Suspended || (__instance.def.freezeWhileSleeping && !___pawn.Awake()) || (__instance.def.freezeInMentalState && ___pawn.InMentalState); - - if (!IsFrozen) - { - float deathrestingOffset = (((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f)) - 1f) * 0.2f; // + 1.2 0r 1 -1 *0.2 //also total factor = implant factor * gene factor * (___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency ?? 1f) - float notDeathrestingOffset = (1f / 30f); // cancels out base function - - deathrestingOffset += (float)(___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency-0.5) * 0.2f; //-0.5 is an arbritrary, place holder number until I find the correct maths - //Log.Message(___pawn.genes.GetFirstGeneOfType()?.DeathrestEfficiency); - notDeathrestingOffset += (1 / (___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f)) * (-1f / 30f); // 1/stat*base, so 200% = decrease at half the rate and 50% = decrease at double - - - __instance.CurLevel += (__instance.Deathresting ? deathrestingOffset : notDeathrestingOffset) / 400f; - //__instance.CurLevel += (__instance.Deathresting ? (0.2f * ((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - 1f)) : (((___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f) - 1f) / 30f)) / 400f; - } - } - } - - [HarmonyPatch(typeof(Gene_Deathrest))] - [HarmonyPatch(nameof(Gene_Deathrest.TickDeathresting))] - class Gene_Deathrest_TickDeathresting_patch//makes deathrest hediff go up. and death res need. - { - [HarmonyPostfix] - public static void TickDeathrestingPostfix(bool paused, Gene_Deathrest __instance, Pawn ___pawn, Need_Deathrest ___cachedDeathrestNeed) - { - int everyXTicks = (int)(1 / ((___pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - 1f)); - if (Find.TickManager.TicksGame % everyXTicks == 0) - { - __instance.deathrestTicks++; - } - - - - - - } - } - - [HarmonyPatch(typeof(Need_Deathrest))] - [HarmonyPatch(nameof(Need_Deathrest.GetTipString))] - class Need_Deathrest_GetTipString_Patch //increases the displayed time left between deathresting if the pawn has a DeathrestCapacitor - { - [HarmonyPostfix] - public static void GetTipStringPostfix(Need_Deathrest __instance, Pawn ___pawn, ref string __result) - { - string text = (__instance.LabelCap + ": " + __instance.CurLevelPercentage.ToStringPercent()).Colorize(ColoredText.TipSectionTitleColor) + "\n"; - if (!__instance.Deathresting) - { - if (__instance.CurLevelPercentage > 0.1f) - { - float num = (__instance.CurLevelPercentage - 0.1f) / (0.033333335f * (1f / ___pawn?.GetStatValue(StatDef.Named("DeathrestIntervalFactor")) ?? 1f));//multiplies listed time until next deathrest by DeathrestIntervalFactor - text += "NextDeathrestNeed".Translate(___pawn.Named("PAWN"), "PeriodDays".Translate(num.ToString("F1")).Named("DURATION")).Resolve().CapitalizeFirst(); - } - else - { - text += "PawnShouldDeathrestNow".Translate(___pawn.Named("PAWN")).CapitalizeFirst().Colorize(ColorLibrary.RedReadable); - } - text += "\n\n"; - } - __result = text + __instance.def.description; - } - } - - [HarmonyPatch(typeof(SanguophageUtility))] - [HarmonyPatch(nameof(SanguophageUtility.DeathrestJobReport))] - class SanguophageUtility_DeathrestJobReport_Patch //reduces the displayed time left while deathresting if the pawn has a DeathrestApparatus - { - [HarmonyPostfix] - public static void DeathrestJobReportPostfix(Pawn pawn, ref string __result) - { - Hediff_Deathrest hediff_Deathrest = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Deathrest, false) as Hediff_Deathrest; - if (hediff_Deathrest != null && hediff_Deathrest.Paused) - { - __result = "DeathrestPaused".Translate() + ": " + "LethalInjuries".Translate(); - return; - } - Gene_Deathrest firstGeneOfType = pawn.genes.GetFirstGeneOfType(); - TaggedString taggedString = "Deathresting".Translate().CapitalizeFirst() + ": "; - float deathrestPercent = firstGeneOfType.DeathrestPercent; - if (deathrestPercent < 1f) - { - taggedString += Mathf.Min(deathrestPercent, 0.99f).ToStringPercent("F0"); - } - else - { - taggedString += string.Format("{0} - {1}", "Complete".Translate().CapitalizeFirst(), "CanWakeSafely".Translate()); - } - if (deathrestPercent < 1f) - { - //taggedString += ", " + "DurationLeft".Translate((Mathf.RoundToInt(firstGeneOfType.MinDeathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - firstGeneOfType.deathrestTicks)).ToStringTicksToPeriod(true, false, true, true, false)); - //taggedString += ", " + "DurationLeft".Translate((Mathf.RoundToInt(firstGeneOfType.MinDeathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f) - firstGeneOfType.deathrestTicks)).ToStringTicksToPeriod(true, false, true, true, false)); - - taggedString += ", " + "DurationLeft".Translate((firstGeneOfType.MinDeathrestTicks - (Mathf.RoundToInt(firstGeneOfType.deathrestTicks * (1f / pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor")) ?? 1f)))).ToStringTicksToPeriod(true, false, true, true, false)); - - - //Log.Message(pawn?.GetStatValue(StatDef.Named("DeathrestEffectivenessFactor"))); - //Log.Message(firstGeneOfType.deathrestTicks); - } - __result = taggedString.Resolve(); - } - } - [HarmonyPatch(typeof(DamageWorker_AddInjury))] //change to bite? [HarmonyPatch(nameof(DamageWorker_AddInjury.Apply))] class DamageWorker_AddInjury_Apply_Patch diff --git a/1.5/Assemblies/Implants/PatchBootStrap.cs b/1.5/Assemblies/Implants/PatchBootStrap.cs new file mode 100644 index 0000000..e62ac41 --- /dev/null +++ b/1.5/Assemblies/Implants/PatchBootStrap.cs @@ -0,0 +1,51 @@ +using System.Reflection; +using HarmonyLib; +using Verse; + +namespace LTS_Implants +{ + [StaticConstructorOnStartup] + public static class HarmonyPatches + { + public static bool IsCombatExtended = false; + static HarmonyPatches() + { + Harmony harmony = new Harmony("rimworld.LTS.implants"); + Harmony.DEBUG = false; + //Check if we are in a CE enabled env + if(ModLister.GetModWithIdentifier("ceteam.combatextended")!=null) + IsCombatExtended = true; + if (ModLister.BiotechInstalled) + { + Verse.Log.Message("[LTS Intrgated Implants Forked]Biotech found, harmony patch running"); + harmony.PatchCategory("Biotech"); + } + + harmony.PatchAllUncategorized(Assembly.GetExecutingAssembly()); +#if DEBUG + foreach (var method in harmony.GetPatchedMethods()) + { + Verse.Log.Message($"[LTS Implants]Patched Method {method.Name}"); + var patchinfo = Harmony.GetPatchInfo(method); + foreach (var VARIABLE in patchinfo.Owners) + { + Verse.Log.Message("The Method has been patched by:" + VARIABLE); + } + foreach (var VARIABLE in patchinfo.Prefixes) + { + Verse.Log.Message("has Prefix:" + VARIABLE.PatchMethod); + } + foreach (var VARIABLE in patchinfo.Postfixes) + { + Verse.Log.Message("has Postfix:" + VARIABLE.PatchMethod); + } + foreach (var VARIABLE in patchinfo.Transpilers) + { + Verse.Log.Message("has Transpiler:" + VARIABLE.PatchMethod); + } + Verse.Log.Message("Displaying next method"); + } +#endif + } + } +} \ No newline at end of file diff --git a/1.5/Assemblies/Implants/Properties/AssemblyInfo.cs b/1.5/Assemblies/Implants/Properties/AssemblyInfo.cs index 0e29bf0..ea3c561 100644 --- a/1.5/Assemblies/Implants/Properties/AssemblyInfo.cs +++ b/1.5/Assemblies/Implants/Properties/AssemblyInfo.cs @@ -1,16 +1,6 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Implants")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Implants")] -[assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -21,16 +11,3 @@ using System.Runtime.InteropServices; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("a5bb73f5-2b73-4464-9585-5553f3695021")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/1.5/Assemblies/Implants/packages.config b/1.5/Assemblies/Implants/packages.config deleted file mode 100644 index 75a6411..0000000 --- a/1.5/Assemblies/Implants/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file