From 68769cb7efa2da49d9b3d50d2a71069aa5b98b3a Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 17 May 2020 13:24:47 +0200 Subject: [PATCH] Dark mode support and much other stuff --- res/ui/get_on_steam.png | Bin 38720 -> 32855 bytes src/css/adinplay.scss | 4 +-- src/css/application_error.scss | 2 +- src/css/common.scss | 26 ++++++++------ src/css/ingame_hud/building_placer.scss | 14 ++++++-- src/css/ingame_hud/buildings_toolbar.scss | 4 +-- src/css/ingame_hud/dialogs.scss | 36 +++++++++++++++++++- src/css/ingame_hud/game_menu.scss | 5 +-- src/css/ingame_hud/mass_selector.scss | 2 +- src/css/ingame_hud/notifications.scss | 6 +++- src/css/ingame_hud/pinned_shapes.scss | 6 ++++ src/css/ingame_hud/settings_menu.scss | 2 +- src/css/ingame_hud/shop.scss | 16 ++++++--- src/css/ingame_hud/statistics.scss | 8 +++-- src/css/ingame_hud/unlock_notification.scss | 6 ++-- src/css/ingame_hud/vignette_overlay.scss | 5 +++ src/css/main.scss | 2 +- src/css/mixins.scss | 13 +++++++ src/css/states/main_menu.scss | 34 +++++++++++++----- src/css/states/preload.scss | 2 +- src/css/states/settings.scss | 26 ++++++++++++-- src/css/textual_game_state.scss | 2 +- src/css/variables.scss | 3 +- src/js/core/config.js | 4 +-- src/js/game/hud/parts/settings_menu.js | 7 ++-- src/js/game/hud/parts/statistics.js | 2 +- src/js/game/map_chunk_view.js | 5 +-- src/js/game/theme.js | 7 ++-- src/js/game/themes/dark.json | 4 +++ src/js/game/themes/light.json | 5 +++ src/js/profile/application_settings.js | 36 +++++++++++--------- src/js/states/ingame.js | 5 ++- src/js/states/main_menu.js | 9 ++++- src/js/states/settings.js | 6 ++-- translations/base-en.yaml | 12 ++++--- 35 files changed, 243 insertions(+), 83 deletions(-) diff --git a/res/ui/get_on_steam.png b/res/ui/get_on_steam.png index f276031cb47d78343bd9488f827eb4feca3f447b..f8503229d4f58b0a0e69cba013b5645024802284 100644 GIT binary patch literal 32855 zcmcF~1yo$ivMBBegy0_B-6bTryZgWlZoyrGC1`-)mY~7i-GjS(fZ*=_cTUbZ_r7=U z`|qtUvlc^7ckSxx>awn`{ZUCl@)-&N3KSI7GifO?6(}f}b)a2=1Ot4Vsc3uv{vq2- zX*)tep}zd}2Mv{+iU%~%EY!4|wB+UZP3&x#L0~&$2(z1wJpc^_B`EA>4>GZWIFT7c z%q(n$$d4LZ$;m9hLgboU@~raqq7ZWnDGvvTs)vG_iHDU5ADCSDHJP9rKY+jn;shdd zv$3{ygvku%E4^sV8+76$H&LQ%Fe>h&ICX(Il9|Af!vsE9V!08AO>+Xaj>v=vaquy`-Kr? zZ0GDGL=I5;dkHr7f1|Z^{F6-p!&uxv_AG47tiP7@2O!wwZ#a8r2kSp32b-`!tRXfK zTPH^VmhEp?fJ^f7e}n&9v^F+>LpwT&y8smZxwd}`?WpE%4`ES(INCWom_Wo`fEg+N zBFxcA1@aHp{0|-n!2f>O-rUZ~&e7cNzhJ`O!~cO5P8O#B#e}~`{sSn)&EmfR{WbD8 zs6D@^0|ew`=b&b1XZ@G#DE&nnnW*S5S>Yq2)wHk$+qpW@{aX8<&p^aLP7on-c2;&) zCRQ#$kkkNK;^N}xvCm7@e`cJ?-YHaNMT)g~j{}I>@Y+>sD--3co z_)YB`Y(T)?S=fNgAT0K_W`E2kFV8P+>*xfsHGxQr36TS&GFw=H`AyhCoUA;od`w(y zJZwx{?3~<8APy5=CN3Tx9xgt1E^a<)4#AOI#>W&4zm7dtiPxN0~qb4dDi`mJ^eu)hKAM>jM z)(aqjn~RGBVA&u2N)~PqYb`MgfNPF_5W>U7^Up)t|1<RK41Y%+g;^Ab1 zumT~EDK{sW32+_kOc0PMpDEx?`1njse#!MOYS^w%_haQinxmVco74^#dD@=qb% zUrzyX;;-i40V?q0?+_Pa3)m3{Ab^cG?jMGNaypR~d#mO)f6$ERr8noiB3!CKipIL# z>{>%r&p5xFQbn(!Q2}A7p%4hA(Djv$wxOz_5{OPIYPInu>UOzz-S}R!5f|29uy2W4 z8>6RzmFbFx&~|QMaF^k^GH3*aCglg0Pv!2@W!&CA$Z#dpa@M?+-k~;CgRex3g%Tw4 zbvfGj9n$aitNbtjsiE@r>+hbw8rknfe)s%KLmD1H_6zv0Mhwa?^gz$QG$^tEm|2PT zuZ9%;Z(5Z8rSVDa_xxY~YWypWfA{=FqsU*4f1xqxub#hX{C`WVE&B;C94*$aDK4z< zwCsTI!tx#J>u+mrnZMWNJT+cXR-P_|2OEos5%H-1q^x_@zCUmt5&r0DV^cWqp*6<+ z;~BuTU-W-tFh=QQB{UpIE0BN=c(uaSL7L2b%D;(?&;k*bE(-=}2S28LWj8-}#WLMa zIaf5_y9y|KFY*U7CLwWopYPGz$O{UfVm^_6Ck?uP)3W)Q3VSIbGXUAd2tV>wQ%406 z;tJj=;^XiJcgY$(2Fh>V2xMWw5LgXkp6X9wtzrdz3Waft!M>MDCF7$XO9)zxwQTRH zSjLKkSNgj0{mD<$4@6tv<|}ttOwd#M<C({oLCfG6pAZ+{{*-#m6VluTs$E!1ppJb3 zcLX;NH5$D`%^p(}AR|bEE=lfh#EOUH)@;zaf-W3PQ7%TFGz`v`lQ7+x$LLjN32Srk za(RWU4QR}-twy4s^nCl}jXLCGs8MJxjQgy$#%fG|e?jnVaQx4n+~DBkUHXK9O?zG_ z1vh03v1k~SXNj9y)VRwcCR&^k4d8E{;xg2#(NbV%$kc($2n!=~-BMVX?Z~M^+mRx5 zOqnX|{%0C!=G1m5LJllyK8niUJGJW)h!s2*8-c7qi+PhvdyJy}qg;oczMn9eV19mq ze_mi-S7k6w>CWyusvJaVhV*tP6Ljh^^EK}O;$jPdP~n8N z6OJcgF~~Bq95<2K3&uVh6W4nCwd4u*YeCI3N$4Pv<_W1FFbRVLb!;$;bhKN%b6i|? zb@j#h`T6Cgv$HEV=VUtr)pNwv0b6W-Wo)iEg*&I zkTaDrSFEQ zeyp4uu*XuOofJS+g;E*MSEEn*#BQOyvA4GuNi1-io|o=%)tK>~bbekZm5K_@5jL{d zh&zRzo}PbUL4coMZ<9F~g85O5kwB3uwjdjfx>VtztjlN^_J^W=(@ju5|DdU^o)i9A zhH^Zga=;wmqxXY%l;G{LV)N4jx{#BvnOR=v+UgBc)}B)@LZv5G=cjwKcGJqK$w|&y zP99E9Ev9%m`j=6?{@H3Oz2Xz7-^Vyj0|5j3%fu~(CT5BTXVNCgQOC(Z#_6(@&24O2 zo*wUBANyYkKh9>|T^=$qF;U4fi64ut^b?%u?LlK(`5`sB%pSyH$31&?0ql=yC0~+M zmr1#tgo;|+VKOEDLI0!jZJ&$b7 z%`wEwc@>Kmrfore@wyyI;c;=;&mu0krntBZxniXyv&O*m@Q5Q|Vg|+zz+e2b&$d3V z`^Zs5WhbpFDDzbE#n^2}tLEpEU6-8Cg^ql7$9hSYTJ1`gKr7}qVZkK^u(^7sCOU6P z#q=3Fb(p663;Kb*$eYOjX32{g*<&0-+4-?7{4GmclrqDga+0qcgy%Tj_TG6$(@OxcKN4)p}P zd;R_WtJl){3tF79!)?0f<9Ap+tb|Cv^_hn$A1b#ET}48M8Z%$*{bpiK&2(P6*F7w$ z+sc>#y1J$&c0}sZxc<9~*JwZ4OMkM8Gh7>A7{X}I?bqz?T54+7Q}+3P5hi%vxdWAL zPgGh83%Y~+xuKsEJCrg47^Odou_uL}5G~A4Umm&&UmU%@ehffF=anJa^QO^(&fDNM z?wqM6it?YUYpx#pS!+<2Qk@}Bt*WnY^RbdLPVUCLMT)oR8%nQ=3LU{yn8+XQby7gj z>0Q?sdUmZVG4`JF;LFRJtER1dbnopXSj0<$2&?u=cb6W~0=iS^e)>-` z8iFG;)6={}mumC}@LC_mq}ovW;EdUH{t+U(()kzW7l*6u3s) z&DsL@(gMpEUN@B;HJunLmGKB(SuJG@IqKLsYyYDJVZ6#dx8q3I6F0#ZQLU%_AMJTF z+qAWK8Owh=pKmE4s(1mp1ner*(Q>&H`4tu8>%Eb$Pr6JHpYOkf^Zyh`Qr!=x5OdM( zRt>@Y_<06b%Ru|&)~j8K_l4qjhhPYrgmTqFQBKZqXsFDmi5J2jRr=zp>^pM&aqPO`o>v#b=cB-m9aZWu)nDbqlP=0j(A`?{ zVkM^-CZ?vQCnu#CI+ezJnl)!nQp1YrFu{Z`oZ4li%l}4OT3TvlV_{)uRcQCEc79N| zT?XQQbF$v6nE;Y~jE?>&N8MS5plk9M!#iZfAq6rf(r307x>_dZX9gZnqAxQ3n&LtBP!n*>)EUF%T>M;y1Y zEKlyrZMV%VUc)|qWd^STrCKwSU)P~7ZfnccA31D$>Ut|JX(^B zT-4UqewT*+W+=LA9#$}I*iBFt78h~lwfE2aw$<}}IaVyWF?c#{jSpKP5*bK>EJ*L? z!0+nm1q9~NiDrGbN53w&l$@d@kYOoimXsDY9xZ!nYI=WFassudN#|%cyD;U#d{xqn z$X2hmsU4Z~xtz$j&d>1hRYt9i^V4a$tS)_8=V^6z?y)d+7`5g$JUUCxFswV9eIPWr zPiejFk5zo_)7ewA&9+~1v|%QEx+WU({BV1|`FK5{1paHw)q$Pu@_I??PP@RR&tAr( zPiHf9;)Uwdp_wiI$fw)|+f~?p77JnzMHe(TLbtLI5C3!><&G1^e-mnrS}rbtMfEnv|R_x;~b^nPBGG=CSFTJouq{vl-=mt|@$y5$d7D z%yRub@AZWh>C-if_eG)ag{1FkT$;~4f)UC$TF>g5>c#IbmR~#_On&p-iE5plSn|f6 zITRi7I^MYwyf`@WI*QG>9V(oyb{_grA}}HRaC&68gm7kQXSL*I*T!&sTU;HSV^J?> zq&@|NV*T0eZAWtxt}EVG=T{eV+>xx6p6F^ZJ+O^AU+LxoiFuRNk9OxOw+y^a;$rQZ zxVX4B(Qmy1^H0BAp%SvUC7%LYqF(ob@Kj%HXY0$;uoX zd`OP|offvAj&es`vOeoz?s{YBkhuVHPe-zFt%}-Yu_FDm3ogTlFyW;!y(U_Fs8Yel zt}NlJu_zGPK*Xe(@B?yNmlgEuYsTaL6BEg&1v_6*?X-qbK<&27P>C+Kw~w@nFSd3J z2j+cqOUq+PUIQ$$K9xz zaM>BHlE)~u*{PU2FK{XJ8(>nP_oI8d-xuDWb|THaD67`zbo(~2m-2M{1ZcHTw}UUgFk$p=DuX1q4~1dAWJ#v$)&ZhK7aEuqCBz7W23GKCjOj6W&iBa;ie%3HvM`};qpBPBYD6D4xW0#3$ti_Em9@Ysq|xP_y0^|3h<6e^{wYtR z@1_QI+*0>vkpR~b@2I9ML54oC!&%sg);*06+7X6apMa*z3k@h;-y_tFyW*7_^3(5e zd3glL*+by*_ieQ`HAKQbMU9OEYD!_34gTXgpgAzT5I_IrJ*x2INf-+Y^B^8)kl>@6 zr>yQ-bZ5w6%iiqcgQu0%-k@oi3`0vB4PU(KGfPf_q_h+P$J_nA(q^B-MZVev8&=vK zH7~dA_XXc@V*6|>U7Ve*4^_I}>G}GOq`8v3f1s9RhGe64eyY=Pqbb*&d8H%H@L7Rj z4>&83z0e`IQr1m&S#l{X(1Bt=OO&!PW24!d4X$#}gzhFBAE}fqC`fs*7q2ZX=EJEf zIwQA=a@7DSa%?bq*k(^BQ;*tU*TK4aA)gxy1`~Oiz4PBpOhX(k(#NRyBu$TLd%Yz- zTKh?yQ;1WRMeo~Ar-2*46#bEy_XW%2`Dx;ht2@PXK_PDL*F3FXTE{16N2jLh%@m&? zuaOYYp|*95=|Qc921m^4J4a9L3EZvMCx$na;cv#I!k$&=6eaX!)yJFES$YFbpiVH? zy2a(oA2fgGQa_?{clqcY699HLs@?eNhjH$1*f5|~ z6g@WfbkX{F1*y;?b-!*gd>A2Ju|%E0Q@v?yy}Fx8f8#0c5AVIZV^(wX6LPij6StHf z#!@~>&X&c3qSZ;;qSG1 z+gZB7TSa8Y&n_+`qeyJ*>^MR@A_RlA7+*VBoKN<}#;#{2)3=MJ;K~)-94NlN`F^*2 zbq?qZlj(YYft|Uz+v<5aW}oE{06=+2TORZVH={tc1qQhqqZ8 z34IzVCeB+Ck0fQ^kGa!OKQjGvkJJJ)oAo3T<(XrtftR>G9r1r*3w~dnz+lRnPjCUf z9Y!*#W(7x|SZyHXPWj&3!b9KqmZq^cRRDxa`<)-}T=W%M)sR;?Q8L|UTCg|_lu;EI zzcKz)+gbKY7{2i|0~+uBRg!2&X|pn9Uib9pFe7-pu$3>RAltO#HZl9|p-yO7E5cwo z`~agb`;zUlIdH?r+U)G#1CzkKnwTWwc+t)7o$9voD$u&sarv^;u?u}a+#iE9SN9Tx zFUMA{FGjGq+(uI^zO%$na?e5$p>>Nt(B+tsK>jbM+Id= zWkpvWzkPMEgAESet2*h&)6&*pO`A$=Ds&x8DOr-GW4|haeWM!ByM}>&8J@(2JrA}`c9N+;Yj^M zT4_&9*nzz|GKmtp9qmNt;^q`QZhOe*q&=J8vqN|ouvY=p68Ib~3jv4Uh=>cu#uL5% zfdNlX&xQHHTheKsXo*s3rrg&%KLuDIY>bf><8`Ep=Z#|R?&2G)U)AVS1A@w zz3|l1GSFZ;IRtG+s%oOF-ykny!xh#vL*xzF;O31yqz7v<#P6;6F^agLgnNTxJod5kQpoXzU0Vg%A68AP>T}uTG2r6TWJ3*GEIb! zzd*0FlSTUQz2pwqkvTbL+wM+GO@VH z$xhN-^jP_3ocaT{X8m59zc;$@{i;8#C#c^8WOPmVbY6VqbLAPk9vk}ki{yxM0BtFw z=g*%%x3-oZ-&_Odc0)(U^(EJp&5IIdmQuYBK^!}Ql#rjeIK4eI&lk%}Yie{BHyB`a zRWvnc=H}k5b@+|oW>+75H~&-ze?aeOom7OM?P#M7Eu)M*XO2ls^<2{;X+ZraBUAN) z&GF<9cms-^X$Sr|nJ&y|DM~DA-;OmYL6QM5<*eTqlyIovh@5GK%ESm}TBMVI z8K}+mX%kOex0izdyezmQNN`td4eA|lJR(e(_&RjO2~r!u2@WJh&$8Pai`A4}`ve+~ z;a&XaxOm<)D(cvesRH^s(v+A!t)x9j&()(T9bi(+ey-0sy{ce)>!gn`+_B>X^+A^j zya5g6&u&~^w}Oj=5OAWUGR;nOFM{E0HoN&YZkm+*$<2>y%|lH?gP(}1D@x?;i!U!r zj9D=Pk3Oo!Y`PUr0i?bP;dCUD4WRIMEn%<`~M+j_R>I3gb&(O&M*)D7Nf=g0pb zppVdq9VH1^kq;7Cebyek`7~CRmd}a#f%|IqR@T<0DkKejG{Um*-pa*^Se&q8%eeS> zm#SJGPHx7*M$xYy7$I2x{7f}wOw%+G8|%-$4ds+zxrs`DY|hEaudS`EEUYXqZ^_JD zG_AysAZH36XuFObp85!6L3Q*mn3m-{csSi-b=uIxk8jS|a@eK~P# zk4HqLAfDAk_5sWnmeW~-&j=N4u1rb?%Q-!_>~THnUs9qVDg9BzNHkzV@02l3!1b^r zC`?wC1dp>$PU7VWKX$7AWu4Xo35|tKmm&foj}DWKO|fL;^4#R4QMr~_EEFuXk^nF3 z`DNdPNtQ`IScWqhTEm>UqgYU44vM0VlGVxn<@|t+kkC?ZB(as9RaP3iG=oFN2#_&# zx*be$M~yp^mRwac>igITwz{f zF_ruf)7{lUabcmZ!AY9iL4>A(J0!+PMg_x0Bc+oO#c0O~2TBw>s#m4&ds`b2Cc=AV z-+v9!(ba8p&}-r)dJZ4^(VQMzSDVTp-c9h(9!pv?7~e(J#6;I>Z~HsmPC4U%6ZD4# zm#&V6i|3-YB9!lqHa4J` zy1Cf8czGFHdl~!KzQ#bx-2l_aL6t#~!8&?g=~D`a;qq2Yi^rp@rKxS}L~3j=_K6Rb zaI6PqV}?-$hlEgk9UUAjDqwzj_;swskD6Ii+fMQ7*NJRY3w1wU21fMzjSl4vls3~< zwFJH3r%+_S@gwwk8}6uH@15}+Icj+f@%6BtqK$rZOeX}s{maLebkC#a#@5!AwX%tC zL?R?%wzagU(5)kTXEM=fsfFLL-{r8@i_40CRUV|5r+RsPdpl1ddANUcRIP<9WkFfO ztfa1tkEoZP78aPrI52Tc{6JJqe&I}qKwkg@3qKRKRUg_P`ru0Bw)%JnRWMkU$Fo0t zaM`9MCnq1{N38BY<9}&sS-?O~A13(i zZq$A2)8P?WzI9m%N)m2ItR5SR;9z>AN5k&kp4~kKChN@BnI!pJ52d03^|{6IB27np zVq&3(%cPwh3%XciKEU#DTXhzSYncxP8;5aYAz>#KpZ znvX4xl(=%XJ?}on(lb$Yb?lUs7ciV{d&D-yK>GCzHH;HgW-9O?o>ZS_#}tjTJK);W z+#g5O#^z$lwRvw$l2pikHL{?9KG89Nj{bcVXQ)OQbf;EfA$|MLZev6m>O2GAhlm8l zCd`k4?Sod91T~BwHjJyQICmx?^`;ep-aW=_n(p=HSn9h-V9+|4Qsv(oYD(Mar{NLw%8_;2*3L|;X{s0H)J)Axn%`B=&DEc6u@seb zAV9FC;>KiYI2!K29DAMq9T(~x7GXnE)AKGyPc4Us3TFPo6%`d7>Kc|<;bpqz>>7S9*BVU}4M$!U>rrSn%O`r_7UNdf zt&mhnH-0mz&z&Yb=kdLBovD~hFre?iU{2UuCH8dP`+niX+Vnp7{SD&~sXtwXX?1c+ zGU39)d{MXMh@l-MTaFPYXorrEdsxdr*+5ry-Tt%R4V*+$T6$z4#W89-7$-s^-sC(7 zts$`;>A0eg5ebJ?*`U+(e8&aux4g&Z&G<@sSy;WA1}N}Bdc))j>=Hkz-N7skhpt93$+`w_q|#K~|NR==k| zwoJ#Hh79H6HUV)lUnF$VNZP#ZB6@hcZEdogMDkM>!8wc2LWtOrgU9UA{8D9BKKIBR zF?a0T_fOfx+8p1+2^Y7$D4jS!Y2G_A0^21on$beAw;)aaSk_zJTt1B zIFxby1>`}`BqStD-&HP@GQMxHoGQv#+1Tou*)H*OcO08pSkNi8jWjsF$Xhv^WX>EJ zVqzr(U!uiI;#+^L9Gn{;*VEK=T}OvQgVkfWu(&wBH1neG?td`?W81TKU{QggJq3%T7vm$4xL=ikeEB z&I8Zr4!Cn9B-kZ-F7U-KzBr=XMD5jUX!Urk*(l?3o!h%RQqTP{litXLgaq7V5{K!0 zHD02VJJ{D5EEq@rB$$mNxE$Xo zJ!l;cDKPnh-00(`IX<3VeBfEHBw>dq4Xjnyr~@wUtO^R@-_i!h<-D1SxVUgBe5T~L zpMg_YFDPL#7e}WvY6|;+BqHm0_V{qO`rOa=`DZooRGIn{O^lr!x;oC#&zi^@f#>@) z!{49T;P>r(yM@R8w%UZHo+Zk%H@50gOtCbDun9`els3ddG~ZoXTFiKkvQXc#rlTA8J?TTNdb zS;C_;`?!aeDAX-p6G}2$F8TEYU)%E-iw**FqBoe8A#xG_pj-euR^DVQn5J^i6x0kQF{ z?myKhxoDsx8c|nQ2QE2|kJl)$v8@hbjh@=%WM$LqgW!*LE!pG1Qup~lz#}Uw3wm#$ ztBG3G zZIUo+EE@&Z4ujH}tt%Q#AMF~>pN(>#;awYB_dRN|6^JvAjQII|5+i`bDp+xfBKhx-lbHLnCL4oYSm zPpgL%PtB6oyZ5&t^2^vX+E8g)2qENjzo|@tU;-P~>^IBV-fQhi8 z?Y=&g;;hb!@HZ6gSz}1ZaEg@UJDiGzKPe|Hh`D#tyj2@$Y;jfm^QJClJI*K3eso_< zSJ%SN(g)4jw#qErtoYoa`d;}yUj3Z$hp>Iu@eM7knu?Ox9U`={vI6`Vyg^;NB(&nz z&d$!)udkxaq@$7Y+f;RZ!JV+g*13I1(+Xg%-Hk8mQ*+i2;Z0nbC2s7p2u81ba4G0i zItmItM?-0Eq{jWIv(BGnLhrF=(^Q96t1~t2c4HLppmJkMQE<$0{$l+Gj;ZvO84|j- z4W$ea)7R$a<{qbwNm*ZyZ>QL`z<*oQHc$b7Y=iD49HQ3Lwop|)TW)?35)yjDmkt@( zD{XcDIj9|F20y$2uJ{ylLSGyp?bZ@|li>7Ry;Ss3C2 z5!CLuCA|)V=N>j?jAbq@6!8__@WZ=crq0Xu?VcaVBQa*CrV9PvsK-QbW4KMR_7>k* zWwl?7`z0>S>+0(0*4}T8U=&$X6*^zYGBAv}VFoL|gbUUv9k6lIzoVqy3!E@Vh;DFq z@3!Oys3u^<*!j{@FmGwM_M3JZTVO!IW`v zeu+z5J-2I5{j!dM!RrU^vHl84^gQ?hys&POwNI3NE-6Es4spE1ncvOE!QCPl*ebAr zSQGu+ZUIlSRf4qE&ln~1C$u$mP|9H9$?%Z2%UKY9Ec56L;>6Bnk35Ea2b)#qe}D}8XDTtLjn^S z)xKfv1H%+ihpSmx>6(~iwSS_*rUQyVm|DGW_X$f|>nncbM1O}SXNX1UEcmTM4_ky=h!+o%OmxUMDr9h_ro~1Cx&1 z3M;~+5~>*EvEoH()sUY|a3q|ot26f`PokW*WDp6rSV3bs@!27rl z;Sm~JN=zLrQF8BM;9hD=ufsn}U$4r>O@xVIqz@qetQE<`;5a=s1>@{5bmrl0l=5Ayt?AjWP{Uv1;m>M_)N+YEAn zmQ0TEI@6N0G_msb?%SV?4jx zwt`V4dX=5{x{vP%2pwiWq)Lcf;742bL{QB|psX+47i2imutTbqP(lOb8yGYi0u-5j zj=5uXc8}~qW^D@?56;snv6OfQXRGh<@3*1H!9;kl$H2iPKo0x|lk)4+)7=X(nOQ`J%gN{L+Ya6FKjmb58*z7z;D029Dxzy0A!x^ne zmC|l5opAGDO2=&_R$d{lXE?;^8%s+|K=lZs9`ppA*$=kW1TDrm1sN57ifGz+bIzFX zAT*glFn0%~=SceU?X8ZRx65il;SlHUMfm$da8Pvb=z6BaHTqA4FlyeS#Ec4s^?(Xh! zj%=PnIsqOY65M^2U#Pa-QEEp1MD81Mwx=?5e@6H6CgrOyO5=V{)7Vy^Hn4-AA`xuS z8*3Cv+3y`&(&E1UxmOrwq9x&o`rby4fw?wLSfdib^E!3Ni!y;;JGeL6>J0wRW}K`wVAiy-v(q$DO&g;eml3^9&Wd-&8LJHR<*{d1 zX!N!-G&Gak(vVfVr8$3;FPm_p2P|4zN|LsgR=7mgBw{Z@z*>HOQr}1Ej2X!vnMl+2 zXq5v?Y-4%vMVhm!)urEz+C5F%E&EY_K6+Cd`iPaop(W(2!bnHwAJVd9s=M`bhS?;( z6h@WX!{Xj&1#s5RyOS2IgN#EfZ1^C9;r^J1bY@H%Nk&q zoDnxMmRLl9{nDR)H$;&p3qjskt0kv;=lX;qTwhi6>4IJwdY*$I z0>-%wOC%9WOlQe-LO9ipj`aDy3U5v0nk+ZE|^RdTj1B7YDIym%50d zQ+@QS#awz1E2$~kWI$*=8XACnDsOt@z0li)La8IsFIJ^9xKZ6qriCqKaZ;4#PB!nm z#FSn8T^8gifQt6onAeXC8D1B0TVWb|t?{-CJk3(h?7*H@E!b4O49yueFP$P<(wE4T z$;&~-MKtt0xY*gj*N%zcL<%Sx__X;_K4v_9bBbqKaBgDZY?cD3C~ai9e01ZFdt8e$ zIA*Nhl%q}~w?grVbGo)=*VUcp&+ynip~>(lDsCRyIs;Oh@4#RzBPn%`GBe4KSiM{S~9PyF=H#zX#eDay67 zgvCQK@|>7DM7{-23^alf2lA6JKj#oS?i|FSve#PFhM&dJDPQ@(1XC#sRwyg_&tWk4 zE8+OBVAx_vH-#Cb#ivpi-@GLYSjzRMY=IBP()((74qx%kGB*F}ZImVzPO_6Cc_FD+ zjg^x!MbVBoqLdD=pNNU5sJFNNqb(dSDjbYzY%K0@nrnO<(QGTr#EKne1i!wzT0D@+ zQCE*I^+=%7#x$4gjbJT+XeQM-x=3Wrj%uyU%m}cuBB7-XOJyUZ%IuxSlBx;4n%DlZ zy}xT|YlFbJ+~fB`D4xI2^iL4 zW=n=va7L%RV#AgjyLi@296ijC&Bdm@3*yPXFg=?ob$Tn!#*$D zv=fXM!5lZ{oNhfEDe*39V{A0&OSLX5>3Nnb3EA6MlryC{)zu{}ku?O=F_g$3K&Bq1 z4i5e51`Qhqp}i*j`F^Pil8%lhCaRqq=akY;X6|F(l%FKO;wtJUm{lRCqMrE~y)k+| zF){J%y8xF^8uB$nMKnGy!Eeg326Rtf$Z)kkr#hoV6Y90*!u_ykR8jugsXbEcsZ6g# zKa<3@$Pkr)TCOED?nqMQtqoNf=(u`9@u2Dj=Wfq-tHOeysovnbr?=d4=o)=S^Od8|fhmp+>lFvz*UDfw@76dps_fOo|cQ~6?tf`XP zejT2iww0XK#VHBA*N0+-@5fN{6k3~`n#73d5j;OSqAUA~2U+Qp4fmW;kSpg>(gpWi z?n309pW15f={T|8cTw3V7g5E23<|md$`OG0^xHR`0pm^gmXea1Krs`}!=(itAt3>t z+Oj$%!^2HT)W}g(H#y}P9mUyuYw8OJ>7_F3?&!smiWzbB~BSzSXl6RY$)J4lId0UQ6gnV3K%8iZv{KO3a7zbR$tle zw`#T?biL&T5VH}srREVi0nR`W(2o&15jS_d^mjrazekDBn=YbG$o34;JAWf1Wh-b7A;&iSqVA z_2V@OW}|@-WK&lM-2C-Pl%YKflaotLwbIn|bU?jn=#;<;TW%3e zx;>}E>12L_fsciy1AmfK^aoUfUMz0~1(e|9?EQv#g*@D!xEa2WL2}fazWXo8fQz}G z{hT{pYO7FBJ74?`a2_2Z8g_U>Hlw{cd5YqN2QvO1QEA?8JiOy?(Dp zW1|d_=HZKHej>(v=KAiUC2)<)>qia}l#Nwi#y^`l$k5Z7(0d93!B@tixm_zzD^^_7 z(ajYwWNTAft)>y@>g06&-~;4dP8eARM-+$TZNR|Gq$i3a$R#dGp_@3BXoQVuZJ03dw z{afKhdZ1X)-tySEzR>z8T?jC}1L@d_zA$~G@I08{ZP|8hv!(~Z{u$`M) zYpcDQuucD&`~F#Ca-vMv`rB6DzJvO+QP7)j1^xY}r|b<{Zwjp1B-${BnFcci9Di18 z8VWyL&IR3AXb+D%V$Cl!l6tNB3q%nC$@Rs>#4^16?dqEdkBB;J=T8he=*6rqam=$A zvH4=g<^JtokG!8kj{AWUIk?REH$Fx{=GRlyB<*vw@mS)_URqiPA@IQ?A|U`O?vf%T zOjM{l$NA|w!_{e`^?IzoF33zsZ}um=w&Dq+Uc*D{?&M2!Cau*j2109~1|?K({yO@@ zg!L4DOjXCp9LA~k zduJ@n%I_q`Nd63OeI9E897;P|+XVRMb^r6m?Aa_iLu7P08XKZgra7L1ajz z83mJ~l%j-Bwx_&-cU<6qm5$$Zq6;ZiHT7#g z{QyM!Hfh1;jZtvnmZskx=G#aS(NZBPyH zc7|bijje~_sJdHoM99tY087j1yp>%Mqo;PTnrIL*Z9YRkcpb&z5Z8ELo?Kf=Do^Fm z{c7N(>qp0UTld$)!^4IKg0jzoy#-Zel9ZUvEDgOqJ%F06dXkl))I@oxh8GXn0EI!@ zS?I!x)AJQLUo-WW`CvlC$JHymF)Wg;rc$GUp8`lp%r}Wu0-gcqgb&Qmn;G z);8AG+k1N@jN5{r*G@`KKJj=^SD!-wXOd0MOu-uPO!9;) zD&$ZhM~-|?<|Y2_AnRte^(`TC2!N_KXXF;(A&r3Mcih~>wy*89v!Z9Xy0~guT4v`F zNcbS3&XpDoX+Qi{QnGunV{2zstxTg$AD5b8h=)fME@5nc@9ccBXH{r!h5sa1f;Z5k ztF$n-`bQ*RfrBH|dgs~tWafLDGt|oOw7qJhW1QjQxe2d4W%QUVojqROwR;*$>bALf z6L#TTy|hGpcjbRsRa+a!pGF<4RTXK&9PH=~eRhEoOb)#Hb(w=}n1q+1h855)^2rY? zB+r6!Pj5BZw$+`ZuNRap*Dpyhotl=Oo}cgC*w8Sp{R0DDS$R?|xr#E-y~cIw<#WVw zi)JZgt5>F_H)|mzK0s=&*-Wu@$#lsGhk4zL>^Yi7l*-iUjiSyAwK3*S1~h5c7e+64 z+CR4%eab0eN##1Jwy z@kL!cmMY2Q86;=;uq5(uSizB581)!3wU?5V=GeHD#F-zKMLWLRzuUDj+3`cfN;ixu zVRXxh9~uO_yN0`%F2(u0mVI%YRq6cJ!Xw-=eXpu|Hh({jY@mV#BQ+&s22Ib#rg=bJ zrhm-dT2^7&g^w(HJ08g6a<$c#H=OvQ>x~l|H$-&K)S8DlfxzAH7esM z>5|AJ65B&JhnhPNfg@+bQ;R35?|u1$>plZrIfno~miiH@NnNha&p;Qg@ti1C>7q>_ z38`z>vZ<{@fL~wbY6rZxN2Ar=Um%lLDaIHd2{+x4F1EyPt&u{TnC|=78x|H8%D7j8 zq%iUYT19{p^%CEDl-ed*l6I&wUK`zl`5Mfb3lD;X2$dJ zK4|WLm3NkJQAYi@M_N+p66qS6k&^E2Zjhl%S{jkgp+i8ryQCXw9J)j4?v8W&`#sNj zb^e3HE8cKjTr>B+_uk*N)@Lp7WfLBA%$PR8*Lt{n@XOa#;64R*4est1Y(Q%#IeGCD zhBWM;svw!g7NprPaT==}_X9lHz6TZRAD{3n7&|ZA($1N(Uydf8{;>J}aVNoGnbVC$ zv~wn_D*ej9^ra-?@CM~k=w-TZbHQcDG=8nKsMBBB(b5v-RIa2BF@(c7=!&zEB@-(3 zi{8j@FDZdu897Ka1}sl7)DlbXTm$jth?nVo-PZ%1!OK#HOx7lbe-nQjRJ(xRlaPKf zaDHC8x|-E`+_94rN`827P>bJJ<4~l4q{9o>5XBr=GeVmB$68D~1YZOVS>#(wFz1HM z=AW*v%hAhbmmTkxR__PzrH_jl=^3SErNeTW1d+r8=Dk9P+)Eq1D73m)ckpMP%R4tC z@nS?W?{N_lDhg_SH5M|d{E)i_W&k7gKH8fKDV)OF<#?3ltgl^Z3R=k^i|+8CSG>}3acVTXo)f(jvwY>--fz876<$tm zA-~Pj?)Z3|5Us$2!$V}67GB=Ni^|_c61w{OwuXik$GYGAsV^cUdsC#gEq0>viC_8m z<8wqe-=zTGCTrEd_4u@<-C4UZV1WIqa5)A^!4bi*u3OjCX2qgJUv~~%5r;M5 zHvR(w%4Pz86^ZAK&i^bY@4%D#9ad8_Rix~3<9g-l(b&|)9shZnYl!_9$X+tr^)wuy-`1hrJzKqcx5p2mXcG06%mFYah4*K3lJrz{1!c*Y>6B8+A= zDiPgWtNNuQR_!n1;_q}?#eejM>glB`(wTA<8VK#;ZQl~Bpy^1$^rzUhAuAWeD}50O zU-!!gtkn450bwVZ#fqKDT`O^5wDC!h#Z_x&ickjiye!+ z8X{t~ArURQT702;AE^-~?1Y7oUj@5srr9|vo=#4?muXz+=;-m~Z$@$Y9;-HX*CV=) z@S^)yjsaB`NfOEs3X`j9ZX?8z13}h>sE39`;EwDu^9#(L#TZ~#h`fAha$$6NH2R1M zudzs0CpeJ<(6Z+UBL|q92|{SG^nro4t^Ua1u9Zy8@2}4h$0w%e_#Q4i29#uVWJOJQ zGDTBB?x1h}wkNl>pjq~Zo1Kk~O>3+7IvVg;a3WW>6e6=~1MBMG#<&H{$<6;36>+0J zimpzl%|y9F2Ga#yST0VZ79MwUvSWwS@fJv)$-!2e88mWO)s43P`Hq%jWVf4LVPgJp z;pd2`>(P3Rlg;1d3IxexJ>1+jCkIKBDrXyKpPxGfz3+jI5ja+mVP#}dpgZcHc?ljD z0HT!>FIwXl3ybIF=8GVNAQM~bA|t3)>P&=ID}!hK&iexlQ+mlH>rKsf5h@(XK>o zia#5n5fNzBm+Vg~O^(KvmViAlNY}W;HG^?BqTFIK&6QKKY;C*F+TEav=l%QgkI^!y zr9%v1@I!-1TUG+(+3CoUR;1O*NlCAM)HgOBu66FLzeC~YUmW_@u?~o!fS+lMg+=k= z0=-5jN?}toX$&8<1eM>?bBGm7k)XkO_m0&6ZVR_JC4^SCQTK?iE7z9P>w!WoXhtL# zVoj|en9JvHlpc6n38xtlZqE&Rqp$C6t1Ie&SAsoCbVz%h+-Q-!V+xXLLFY@T(XU`P zgV!yiDUS*0#2@`za`YxHD-~HxNr=m5PtcgMLIdVz~*NuCNQhXM8ee zIzEsO>>M1v+oN|`$Cb~|&oSfIwY6%u72eig%*@OzY%Cx%=*b@l!Yj&elarIpIM}Xq ztBGX^5Oo=>a*FJQzT2^~42@_GDoyQaFeS*k2xuD}?;qNo9PXDFm)Gl7SR}wKntCIF z>)%Y$OaQZmOOC$SifTJQdl_SDKYhX}!t3%G%fGhJvL#9QcXfk$@nZ2#AM`|$3k-ub zv*8jbPtli&dDjUN<$t||s zT691x#QXSx=(`La>w(Q+6Z}K0bl!K9VXPXdkBkS^^6=4NujnBU)+;(sEcLo^Qc@xL ztfX>e*Vi$#+uL+C6n#Xf^2HmkU&xWXZTWAM81-FC-^ zh7Zy)WF3Id%W%a|gx;bKi5mgeII`akoQBv@?Qy1u@%Q>O<~5G;z~7Sm^3nx48(TN& z`b>lpobYkif zyd%qKlmK&Riif{o&fAiKu*htAEn_M`TR)9$4D8Mr&OV|5)!HPI@%X4oqVe%raqcv<^?#Czd~?>84DVf7o06UY>yIcpIw@*(TK&xxgKtPx zjK;(SBtP802^%UJNswqlH@nFPkgYyqU2XkXy@=doiBPt`tDTRXS#3?t+hhG(4eOG+ z&dxbIf(^x$6~mS)B*ar7^w#*39Yr5WiX$z`>A}8D+8MGo%dXuD$)*GVHPgoj|AMB# z*X9GnP(5FQlvj)bYW*h5tqtklAb7Ga#4;-dcasgA1-D#M!u(+GKM&0v>Im)ZuU8Idu8 zn!;x)3~ZqL)$3Gb8fF5a>Ny1L)h6JK**pT_OykuH>a4atMZTU_^?}oo5XnV7)fOmx z!-kr|vuN9XHA{#$7Bk<{XOQQqIjO_<6t;KC5{`LWoHAA@!ADud8L^%Y7@x?(g z5SOOeoES&c9?wb|qUGUemCstS8vh%SN7h?9qinfhgAUJ%)S|cXFHRs2aE|iw_8M>V zojo#&hfKL^A3AdKSg^a!%BtKi zMVnWGNEVDC--_8h#>T+GqJB|P`p!u~*IeIo+Wz)vE>Hq!Li-_uN-tNdu8XB@a=^KR z&HpfuQqOLmn*x84A|?bzaxREI$JVqnoX?(a)DVd}dhY~*~DZmv5Kxp3iUtbA74vJ$7-HKRBxAvNTB6cU;`E_gs?s6JP2v_073-6aP zW6`}gs~fYfG&fImTNcZ;kpX>-VFa2(eY&2a!jo9w_eqC#t+z@ z^`xBk&*dD4QYml4z3B4cwGE7%y#q7~i!2WgY*;LC-)KR;K&)jM+a?%DHjYCtj16?! zJWWk(yy#f=X5xtD@=1Sum@E4%?tIOH#w^2B?9rmPq~|cu`@CKEa{YYMz5{6J3y)?0 z5?zno?^mS?J`a-V#+zWt!DC25H!k@EG88*?9iib>f#!8_+^iJUy!pS%^YgbbOt8~( zdJc8hO@jh|_?v!SRW;*Ei*~!ZLMgpziW?Uj1Lz`-9d`t&-xTQbEXlje6IqF@%ySh1 z$Nf+~O+l9u_`?S>L9d-4>=pmVTiEO@fuDL7ENR2k`>UaJ9>AI*iu|>QgCMO)qHa>% zRGW4e?*SH&oY~cpv#2YmXxQ3?QPal6YgPeMZg*2ZKZqN?#in)qXT{{y-N_K92r+xZ zBWRxV&C!y!s;VkcY6%pzjW@uM>Mi}daC8Ad?E~>vEny4;_|`GKZ6^JzMSPsUc5e~o zxltGozU8@T4bnmw3?R*+t`W03IAkmkyjotX(uxXuTgO+aAc1-Xe%#1`KoZ$Hly*IT z?ynIBuhT`@dS}Nh5>~bYqBld){VJ=f>}_q4qQY?J65)C1%kZ&MlJyHX%h{|Z;zEYX zi%Xno$N=3P2vHsF+d10U{eUq!4cLYdRr}c4`Iwjt{?&z9XFPwR97$Tri_2*1p0HP9 z0(6k(0hVbEZA$Q?gn5Hb)n{}dkYx;;+xYU?F!qrv`>9HDq^t`B2Wk@f@w;~a^l-NK zqf8J_TE5L2W8S+zvUW%#yU+@S4m|tH_vF43q`X-LzWOrpD34j?I8YNQZal2mm?%~@ z?}1;xKDO}R94>jUcfC8R0L_1&D{`h=&dj8;BGW)M?^Lvdn$g z?W8adj+7|j>@v?$nLoGyZmw|ZNvim=L%-vzAO!^h715Z{+y{#Yh{w6Kv6imD83OiB znMM|31RdF6lqVsXtakYMtCZ;O?E|d07fg=T7sy449Ckxq?UPCk2gTs-1la#HJ zZ6nWPgbwLIrbLwXlS4k}NHGq@!O=^-AwdNo^^R8=q3=lEG;$jwD3k*}374&wcY@ zPHo-oW%bW@ul5v^_0-P$nNFs~yYm5!?H%(O*a{=QzwXd@D|qRei-(|_&hW(7TeatZk8uN(FCuPxpC z9pfNh%@&FY(Hl}tVzX$$wB1^D`b5XogA&o1ZpT3^f;%^lo$%#FXp=<0jdvtBk0_GR)OjRhT)nx(?_p6ZQ z)*Gl@YZaK(A7M-tjw>Ru5D^amdiKFd5Gmao)Y1s4gWI!^w#-5vR9V;D9MUsSGcT`e zAcYnLK){kIn8iY6@PhZ#_W@fIfGNuRnOun%TS+E1{6n7m;`QB!>w$k3eE=S1%uvDrV0e2@Vwp?GN;dH!r$?m~>zwM&R0^Ci(n`O<*D^eAIY^;Yf zdU6&$qpjqmXII({ic(P|^sZDpx=FqTU7Y9;L3xMHwQOWBiZMudf(Z7jf|_vVOp4lO z-6uU^qnHgD4EWDC33ECKWlZ_|p^2)wFi-aNjBLZytTdEXko@GzuULS4gXq3_<&`kh zZ9;*H?Hjlg9{dS|Afq6sJ?&7FSH)W*w$?F+xIRiAs6J*itxi=EeVz3WxiFQ0obJ8-_4T>t&MZ__++c4r0?tQ$`qHonExSlj!Hb0LY1But_6 zr~XxrGoZWbJ7zMaQ`|=izqn{CGIc)I#1dp8c3$6Sgb}tD6B-MtP9uC~5iG-At!c7i z%L4RmQWv%CJGN}#jr`*LV5nerL{qCl8FXcBWyR~cOEEfMME6TtS{m@@b*s>1DM0&) z(%jQNxnZLlTWMq18m>7axOn!g-%Fdbc^*_nmUyX)_8 zai`GH9XcH~wI)l=Y8S`~AhbvCj&4@`PlB+Q=ccAIv1iAZAidXRd501r8h*xIe|29Y zQq|`7)Nq++2Cr=IWB2oOA*pE(9dZ0S-_2rK zRdiHT|6kc*u(?d#bKn(9;g(n)Cb(al=IO^AEA9kTf@IOk`kjk`MU3*n8qS{$S)B2f z$+GHqkqdSUSyOMxN8l{CSP98+80F-#puvh-T3R0N?p@kKCvzg=K3dxC2~$&bE?iC% z=Eh@ivV*!|RIG22SP9#B4h_@OzGr0{!&O(~gLBGDOLtEW1idTWylj}DGEfsj%^>|0 zV2et;oL%XfR+dD2ntDY!bn6r+qzC=tV+QZgQ#$PYlqq6}o1iX^AU-lOQkxs6q{}4A zrgg*A!;7Ez4HnAEv%S#IOGo<62R+%))UjRtYq&FK+VbN)5b>$gZ0o_l%E87LeV-WC7K&4s_=+YYaQe?mBo z!okDC{pwA}&GRGM<3sktjqpRCx-uEB=a0(DSsRYJ{3sMmWkl-oL7YcQVNhuA zSN*qOGV>#PF3hfhuRMlRi#afpm4!7^$nAbpzeucG1%f|c>Yg$p`2{ZP!9e`eQTxrx z1uXXYFchFeb$`Ud+fIa-GNdS~vcIflhWdd?^j%w1mPcS#Vya_mm>UFdOB(Fm0mx&4TsI3JRJ#I+8&YOkViO z>poLBKVDCuTI3Z>Z!_2N$sM}iI?v0?9gcI>H3L9aIuo((bwEv@J5Zl#Kze6VyInX? zSs7EhFP9*j?@_5B2qJl%wZRh)+^pr7Ex{RSDtKK{iQ@od2h)%wEiE(2obTihNe3|2 z<0B3qFja?hs^_MXCyddNJM*C|aRNhQSSd>vE3yiGY^A2Ngr3}C-y>gcl%G#)=vP~( z!a~;`dUhhbP5`h;v|Y`?{cO{7L9zZ8kKYp)SDnj8$=-^}cRCZD_XnNrrt}S(Uy}3} z^2BVRflqMfVG`6JBS+@9RpsTyRb{}$argL`oS69iy9_`MPtVM}@=T_NvSYfBSuL2q zJ0ILJnH?k;pPHLlH?e|waKbiulm4nPm60R@=Vw>f!{6Nq098Bw_u4o@<3^-(naxMxT=lfjXMYe1HkXN{kaiwnrO z3|UdF;<=ZFmkkg^y*3f$OhQz`xjV!YPLnH=iK`V$Ft)0#Hqy`M-QnO1ML*P4>SVS2z8V;VmAV_=rip#We}A3tLn653aDm%eb$v{)aPt@GWpt;aa1M@pBD z(z3FyD(;D+|4Kw!aq3%r7S;sP%HWl;gtyW4O2Q@QA3NE3_&(?ws&6pqKm4+FnYXbm z6OD|_@}w$|t1YG9t!94X&Xk7iGsMPNXuSgAW!qP!e5)!`!iQ$2lz4FW+jc zzVmTk+wbmg_PkKJ!S-VN~l;iB^+wv(OM& zAK&hq>KmH8;$dfg+B@GsC-!BPH4{8pYzk5K*S81X4j{U-H3LcY!S$Dk>8yp3X`^YtoC{R=pgfb`3H{kUpC2V}avyqv(JLwd zLJrH78zwMbg+P=tRsehvBPxVXb_S0z0f-0&e4gT}BSa1z&ur%v6576a&{U+I@sOm< z;A}@qgUycR=YSvaBEA(_S{T5=7qI?Btlol5ocH9Cdg6(Qv(e?!{~-LxR!f+Ug0M7Y zRx=2gXy*IOsgmA!3L$A_CaUU!no6?~$|~NaWO?>od>yhg;~O}+0j3{49wz8Nv~cif zBP`PO$igMok4uZ0=|3RKw(jlrM~YLY4EU`65QV^v%j}5!nJ|^rHRjglOv7W_kf@WD z|Q`&SgHIHxE@g%$yEWbUCb zJNUNL%uM4mPuw%GZg(K|R5e88GjDYBLbJ9J-^PU(5M4Bb@xHm{b0eC|jU9VKPcL)gymUEmCQG+!w%<5nZO*ZXM`Ux6v5?S8ID3YXT z+}zwg0J-k@!2cz-^Xj8<+oKf8zHP^)^h+MYS%A`aPaq)}?$>+SQ041e=0hBiWN*}3 z_1vFLfT;|72WW{aY^&=DEegPUX}(I#b`w3GnWd`yJD*EqQ)^K{IAUN=Z%aAGZB9L4 zv#V?OeR*#Gn|JyHIpaeEd*{!6bRe@tY|+i$P%tP?jeIrx>$_0e_&^oAZdvjN>-l#g<% zvq8Fif>A$`cD6lKPylI7s*nEGjTI_Z z=i)*hi{iJ9l$C?OY0cOfy|s1~4W%$1Lv38yxiI|cDTEXGb69SJ3v4Ajd!B_G-MD&{TDpfEDyr#2cA|aE=)*A4GWwvF>--zhumIoY`;+lY09MxqS)@KYPt9N`#d+ zq;SAU>acoD&-q6DF+AKi4G>;VF?@Jml5DUL|jpy1gpHTJUq2_y<& zLQVKwcN$&Q1okhwfjlFdH5-RhhKyVN@8%p|0ER~sF+nzv#5eUkX}dUu0C9(P>`vF9 zcT6pfOjXWh5q*KRWD4^ers)baMMV~@Mr6ERI~$F&+mGJN1b{8pP!ghRDZK>yBuz*_ zNJm#lPiHA5{R;@jiFLzqa57yvsH5=cUhNbc{!UHg7)Ge@Y% z%Z`xf85zkM8hVZXCSt~-VSd-Z_(ZLb0USq_DJz)=Q=!0%7+61}Wy~jJw|3}-O1@{w zKCJsd2Nltyt{IjmSEeE1^EehrH6YoxrJzYv=vjE1g1|O;i>u{0RQE-G^XuDCG?7?J zA`C1Hj2LAFl^bHlzw-J*mCf#{UlG|0Dfl7@6sYAt)T4XQk;}i@OdSP;>#hI|enB3d zldCUCCJ1U*nt8!$(-Ks~kpr}hy;FE+c2)1~SG;heO&}7t6jySR)UN|FkZ$4^%qdxt ztVA#lQ!jy$Zb7|7iztlB@6_)nSzXc&w%nsKla0gJw3m!J5rKCY1rbc2}r|3c~A}f!bS(A+H zyFKHdNvvxVzL%f=F$lrj+;(n90ov=4yxKe4=T(mM#J7Fn+AjcI>N=r?eq;O&0MQ&Y zcH!B4mH}vxDwyesN>!Dfp~wJfb723#CQ9nlD{!2d@u{Y!;lkwN^4c19-L=aOTbAcl z!^O^ocS<|^44t|ZmO@OtEWK$jmGV-X({!YR$)q(Sv2w8*nfs3GVupS?0At~buiwAA z4-#dc0k%?B?dH^_y;(}U)+!0k4*&xJ3~u{#)dMB64m1o=O04SEmi!JXC7-7RSyzt^ zY4G9|b~jdk`9rs{JGd()pJRknZSO2aw=}hq_LA0A~5I1 zALPoUfidV7-m^tWJ!OIy)4^XU45aVb`~GgciTWaC$=5=Vf>~ZD>te<_wVymwVUTxy zM`*NAdOT}k-}$HipNUkMQQd?1viVBnqVwsRkQE{Q3*ktNToPR2qd64o_&WeW4r-GA zf*;)|lGBZuE@}#Cu@H8-K3u3A2Sz!wV@8;s{c>&a$@}}m=V*kzHXAAwyEn8r)~#cz zYWs*w1QQ&TWMD1Z5 zopx}qOo*K>5nX8XrPmv3MZ(`QUqRWCkOfWw$X_L0{<}FM_Pz*-7NdhFd|e#IZk$-S zs-4`;me-sq9=w5=78;V&qj?6DJ!XcqLhrJy4q0A;h2Y4_<|$!0R{*re52QYr9+YLjONF~o%a28JgRO?+G_vzDJp1;G?{=rpvHr{D zP16|3o3uM?@Gf>%y-@baXd0Jqdpn>)liCF0q0yBCyLTw|JF@qHbCwtrSquoNEKeiW zzm55}j2>BLG`S)*Y;N_%Pwffb&QVfx2Dpfj`~QIfsOm0q6l4@OgP%kgq5A3R85yJi z1IYx{;dBT=*|5cR56ImgC*iN7?jNo%7}io@r2RgqNuy#xQ4qJZUg2uV&rwwys>m@% zZ-hi15~nif9Tul|CLeLgnwemHN0my0eOzI`$H=CpFc~CNZ@1&XUm@%zChG3Huxa$g zPH^+XvoNntFN^1 z$`L=T0JH+j$HWD^jfP+W3hampDbb?z!+;tE_feOyWX18EP?k4UQO`ID_U3Vh-1=p+ z<=S9wq9HMx@v7ck$+Ov%b@A+BMaNTCT;pcNu?e;==J)8u%O(@UC_=YW{~TTTm@%sz zCfqM5{EV@y-?|2N^SRxfWz=K>}2%^t-*%3w8cO(}i-Y&c!@@cAeC6zB4HWA9`gv>D-g6Ke#l(Didcy-AI zAdA~y&V-*s%beOCo}R0Gj}CU_?qm&HjUNk?fzhUK=Y6)YAAb4kD0rPydgJGdY#G!e zt^3U)zl+%YX48RiQexue)pekS z<+j?81~UmqhQdm_p>Mk&;O$Sq#XXj65`LqB*RQ*8cVZ>%ez*$-p!A8_qioDRC(S!X zes}nt6LSkQzMJE{hK7Lct+}gf4Ryzpm(2HXG;qSo)-^Ipg7lknK)+*!7#`F&k>;)- z)!Pm6bCWLSu-#Q>Fxj$?YQ7ql5*W^VB`*Ux>M?BSUdDr{zLBcWfy>U)sN5nE-=p(; z$|CNaeLGd!_;;1}PSl`ttcQA0K#272*jWI|@;2Z8Qxt~2gwD#n1OB)LTdSho>S+P2 z>S;w70|P7Us|jb?I-jSc$d`vBF8>Gr=VL;l>+Chp1E$Ef?p}EEA9D}W9gkbWt^3r| zNWJItdDw)>4ZvvacC$!`G`w&1^_+u^*Y*33vx*esFTsCxLVG{=+oJHhY#;J;oE;Xu zj5t0|)xEgSSZ>5AD1(*vH6?p+a89k`I6zC{ZKc6~QRH(PlZeSJ`uoTauUK#P1Adi?XC z66iIUGxWZ`%or^^3l9e{gsp3j13V~fSiB>{~%PN?3oKSnj!*5w}X~4Y7jyy6|pcT)( z4c6!zYOvunUxAgiaF=B6etX~0p%3D8?O)BcU*)g6a$4~-E45j2nBa0OuHy4Mlu`eL zAi#lc94nP4E}lYHR9Is${PA(|>gHzgh-NmYy#hZ<7c8}FI@IoJYVw9~Z#B>XUs82a z!=wUmqCKym`0pc}__tIPgd3I#RpO`mq}S&b12d+zr}3NT=aUyxC#&Mp(tSX}16auq z*Oxab+KK47A_pl5N2sUGA{0*6o09!D~q42b-mnUJr1LJ2mFL$LG4OP5AjmsaQhOWg1vraZ2AH&==TLHB6 zdPCVFZJl@MXTbpj(6yfh>5I|-^w#W$n8~?cXV@b#L)1#@hs?d^&i)GD)Cpg7A>3$b z{p1$Ro6FiR%>_hqzlWu@FW34n0${Lt-2y-V$D8A&IoPV6p`oFk9u=w?Q_@+b7a-}d zVHte8DKGc@u0(J5US$_5{T@ht3?oQ7kauKosSB?CWPdSpTX^Vw-*MW|`EcJHNr*F4 zFT)os(Mdvtj0rpPeBt7KGsi$43KuM9c!RfdWQH_R8u`Y zU4PB(aURGqdQGf&>~IuNOt^V)K&U-|dK`2@WWUEhk+=!C#IiUgwSo~J`VyDM2?NBd zK`qgLfI6mW<-VNS>v_7nbQ&%#%^7pftgv5_qUCw7K%}e1*0wNw<`IDW@*$tzAUZF< zkAVbVGQ8i+uXFA18GuJ8pKxZt+xD#N$T=SWh%J0QpQkKvb_>gs22g6LJpsxsFDuA+ zEE)Q8_VF}Bz)f^Q@a8GS$m@&S%rED*Vr^whoiU^pFt1X)mCk(BKjqcs*SA;ry1LqVd3k+?9bG)+Lc)L#t4fJu~;*pvg%(uiC?Zk z?GV1{@3{c5Vj?6UX>)%57Q5p`yl&z0(tEA0QLV00OsaB-r8k*h{{F!W=<~QfSwcv~ z!3d^;hS9t#LB+~w&&|y(EyelyYs0D9uF|L^keg@Po7I?5`*D#wWtqGy@x=cHg_=4~ zO^N`}i&(yGv4j8HrGel1+pj0Rv=EOLC(@9N=#7LZm?Yct4~IxJrd@(~G_xg9G*w$s z`Sb#iE_x*crIB=Gq~Co-nY-G`e)CyVU;FQLHK;n5xPEMlKUrXe9@tN-UhW+&SA`N} z3Ki%gt?;b%aFJoTDsxOx>OeEm+&d*SkSu%iFnS^81|%yS^k2H8 zOGctr=d|(0=n|4HvFJF{6!N`KTmJk>H`+^t*(Nv?IsMwY%l`ox30eD+tZn3Tm*gn; zP{Fh6Nlg|`6m5~W&=+YYnoanhk9HN7U;BL0Oa~@mi6@Bde+pEgcw_b@r>(6=)y(*$ zZr+b2!p)@HJVQp6vaoVv#=Bk&;gsa+f3{Q`MU&0~P}N?EO2iRsk2qBBe~ZJ}P+KDCg8si*}x@ zkP)H(RMQLWXSUgiqn((L6&=ZdhNJ(q(KNf_P*lSg_uv!-)5zwSIKkRC zu@N;C>+~wzLo;`NX8+!>r%BRb=HTSK|A%_N?(}^Cz|+|o`YIZLB&yF$pvvB3&AzKB z`oASH6~91Th-4#Y^`Y9P5MhyZPQ6Mxe;i3g= zO1@%-`#k;NoQApOBmuhaXZLF4a6wY|mv*}Xrs}7U7i>Z|%h<|o=lccn)PDXH2~eG6 z+<**3DB0@~s=^;Cb7u=GnoA*h0YIOg=+9h^^wQzl?@%rZO-)Hv1{M}ud;8;)qlMO{ z&Z45$f`;a{Wm*-&5eO*7O8?M2(!;jeQgaG5@Ak2yWN5Fudjq)c#TbwP0i6venRxt| zFhb8ouQ+!6JhMyY|5PMVtG)VLMI1ngr-^I^rvs%W)&b@lEd~YA(U?a^6)S?7_D2iks)=KJu$+1l04)!B6Q-D_zY-4N=(UyR=L zi50~Rm>B%Gh)GzD<9BT}z{HAYX2h{Sr|z{Cn9!-9)0X6;ke8O$M|qr^)iTyTVRA_u zD$q}FB>O~GWErvL#e zvTvEu#Cffywe?V4TWwqI{uMHOAh40PTFCH5z!*r70`P`KLcSi7PwItrH@yGP>gG<3 z_XuQfHVX0jQziT+{8ou?oQ4$O8xRROB|`bgcR+3-Pt&M1jV+ ze_e{x_KHlT#^6nolQ*0u;NV0vgdwK0+TwJ0)I4upjUMsvDn*T-T-P)tI;>9CDC>)KE&tde8wV)MFO;qwN(E3S0p+85laUxs48Zl|}HT2Pp#9!-RY+b6DbxvqX>*?*BdpIkVz}<7|e{EgXVtA#xs=Dgwr|W&Yhxe~lp@o{12v+ydDGr;Ss^FUqpoD)Ti)k2iBUpuDZ%ff*?nGR-n0~8JN}6-U%*^fFLa9 z=>!DXf?WY-U`uNU5$dC+Hfn&ixd^omk21TmlN8v>THf0Qtl_Pq3G%iD37Auhi2{T@ z1>p+p!LC4nr@fs6M9@=&`Y*kL@Z(>X*{A`3iMZN|P)qzW2+&o24Ulql0Rwngd09Xl z+&ln20agxPE^YwO^Z5HAN;peKt1 zu#7w0;)~yoL0r|r|Aywj(Ht)Rr?HcjqpKst%JF{^gg>|cgu+Qs$^{H`b#&2mbhP`O z<=4Np0HmaTWmN$1QpeiC+|dKV@XO18+JL2ju3!;rPIgXq7Iq$Z$~ECx=iw3L=4N8& z6l7=rTT~g2BXgiD@V^x16XfFjAA}vvtu4I%x1#1CK?_G0dmuc@*7iV4Fq@NujbgTdSp1lRE=bb@BQyxg4dsIc(!u>)D)CwweGGj4MhUJDKo z7z`8uae+afQt`k#$v(E&dtKf1=k}W0OV%j2U`Ha zKoExo2ag#w;9t8^j&_bN%8usnm~;Ia4S%6hP~I8>&z{#m<4XhV{Lhh{HQ+BG3IajD z#)=3v=vSV>=G6aOw*D{T^xyO7Z?zs)V7Su%Me_d^gE(5adH`L(5|;3o{&(=j_CNC< z0(Adhdk+S20nG%sKyY5NfPVnFfh<6CGj0|Eb~CU5rv(Q*X@7eEUwY3c$jS2?jsG{j z|0lR0E1-iV7*4-z)c^PU17tVj=H&r{Sb*$YW-QzwZZkN}1T0wCInDThJm%*7>=y7b z_P@x+e~zyI@B0ICbZ`f|{0G9EfG$AzECP0ch)`R&INAe%PEK~#AmA@Jvbj5$|3l7y z01j|<1pGUk|EF;?2fJAR2NM3%${!a1|1aA6-{S7S$1eYWGIe;_q|m zzk@0JD?NWrJc9ofFZ_3r2%m`r;cWSbKmV^W-QV^d|DQ7EFW~&al%OWq(^U!R1qb0j zydnv-{Fh<=mHSIZ1&&t{YB?EAfT{}MKdJYxyT4TZd-s=_zvBD1LbiWZ{SPMp68Vps z<##K1A@u9;PXz`)`BTGz9pKF20;~cur}7S< z35Mq?Z)p&+F9e~7H*KdYLJ&)KE`%}p!*oXv{`OA>_cyqkLR$~R9v`4L=VOeWx?LbN zOcW%4aR43$N*!GZSh$w@XDNORpNnwo(@Hk@#lP+??guURNi0S%Kgl?9f`#LtkfBMTl*I! z7!4x|yQ-=DF*n`DR1}Rj5{yhtTPrs{LXTpueEIa>u0HzX7Invn%n!)Y$twsUZid_; zi3YNdQPTC256%zjvq$(|1Q+=`9L2UXM<<@mK94(R^C@lARi}%#!lsImb~S@0e=Bkz zq7y4T+?-UsiwC>W#P&a08y$?GXq1 z{)uHX`l{OFhqr|e{-(!lymnRssq$S9R_5FDbu3ItnS=YyYt)yA3m@OLG$fMPuT+GF zpf^PznWsB$5Y-UvuKKY(WfmyLxN9Sk{2g`AsIRZ&U}U}7x(T$#;HlEr7lH_`}Grour9yH}xThP3|!6D0q3 z_FWOm5#0EAtwVOD5wbD)m#N)f`e8n3ggPdK6(;N&E7f3#sN~26ZC+eAHktl?inVuZ z?i&*}9pzs*`=zI^`(OyJK)Y4fplwGYIirTJ%F~^-t}iduYcJjpWPM1w@+(?AJ>`X_lIN-ebayB=R1IG*>z7!yf5DxlKp8g z_R~{%dBvcvbtl34P3^KFR>g?ou94ogmwVh)4H@a({i;}ThQW{IKS-XzojCLLHjq!Q!Ee@qb*Z-*sHdzH_NOElE3?+EBJV#xvW0d*WBIW#N0oj z;R_4o<4t${q&Z;^F;T(;pIe(xAvz^aC<7tZF_eZhPg+>wy?Frhz{g_7f5K4@UOo1# z-}yAMl_w4m?=X#i^(w3%Sd{tjEqFlOSXdDU7M4eyKt`*wpF(4 z_3ZDJa#E0qbzb0wdCZOZ^ih((1kP22)b3KPAf4-(XvV|9?pC{5Br|2ySbIC3o15F% z_AI~UW^8}1q4jU{H<4E8rdn87SbKT~qqg$&^tZ1A}K>D+@HDLQ;+!FD@Etc~v#ac<-sO@UL^@a?@>R zw!clWM#}yU9a4uc0Q1fLtxR%yQvX#mFcDXCrlc(m%Ofdm%fOMC`ZTxZ%;0gSC!^ma zevV>-pq06~X6eVjm=uoia)fAt-3gl=U7){t zcfws5CY$4WtWG~P6#QfNcL-3zQF3=hL}si^O-+{}`PQO&>8u0Prw#9*#_FniY`lbT z*gb;q^KgiO($x43jK7Cv$CFVpc6sE$z&TtJdggWKS1HqpsP9^0!Y7;b+SD}aD)g2P z`j#J&I|#Cw5dC2XJm!Si3*5oj@4CbypJcWn;GHe&-KvZqDKmRMfSJgqrZQ(8-QS~0 zyxiBYX<8AIC2%3-p^@M1``jg?>NT&-K6d9~LW`6%{^xn3KfPc=w%RW<+%c2+5CM~t zlET)Uh0ztr&^ylEKi*>@({V?C=TA&ZvhJ7ICE0i*^^A@4gZ4#W zOV}v=6U=AMznw58LP)uMtvj#?s?a3>6ZbvYn4ThgbTz3Xs4BV6B`W&-1NMO&jd7BeRrt+6^~buBStSup((?Zy1(HzDkf$;K^c&3qWPzyR z=8s~$rT#<8Hq$g;G=}hBFf5Me8vj;{hf(-@PQpNu+(rHEtAF&LPKp1k3sA4O7We#@ z=N%CNF}>b%E_Y3zE-W1eKKjGs_fKU5bIqZ zsiV*f@XksahQty4N<4Uj|H<=nxSD^w^IF?HJxkwhao#GjhG`vfeI`}ID&tZS{-4H#ku4*eu&!bgG zS~NyUojOZFL@<$l>gYQEjjR-8pubt;Rdx>7LI3_zF6SAg%&x?~GA>4IKZ?n*H{De} z^_3?xh3->tusHX{zs?D4H#5=VB4t!#`U+EO)S(bu^JBD7Z==yK94IwWuN!AXHHRb! zQ?hwY4IOolP!2cK>y_p#XUL!Me(dLWOb84>;k?BRD}ufrtgJeTU#6?gt6jgig4L2I zMN+WKqnW_7`F9%I=}xqZ#HY-@4hJpJonDJ}bdfc<<9TI_D9UsI;s{C9oSok{5@|Rq zV8#&=X~bL$JjGBSr2@3A6!$fR(h6drnH}?YXLE!}zaYd6eMyKjvA<8Qtg1ROILJLT zG_3xTFk6?o)VK@@kqcOcMUymHr4)J;({Pcijl>N6x4+9xLB_FO(_f@ikdZRPwMB>d z1cH+XQ5tR@Z$I*d{hD?ZoatQ^jVG!ay zeLE>f1dNiUCe;1`)sDIBFJvGkqbfMA;2@=>%pV(5Bh_hBRT&yxG?Yh0P$R;SW^kD2 zq^J=|>$oV)Xt91D_45~k|Hjyn#4AV3dLFV68am?e;|RhFM!ygXW^<-NTbwe@^i z8;5x%15z?;Xs2LNVPTew%ywW{yU(5I$<-ZiOkKE%NPf$cRjZTdZE9i*bABZ#(o^@6 zS?tOTE@IsL(k(45lS_~Y@5#Fw+m=Z&c5zVHcIc+0uU!!6)CSrrw!n<;cJ@Zby!Is2XJN0DTt1q?$>;LjgG!;ql4?_>RPlw+vr^rj)snIZDA2&LiRqS zUsJ+=2j)Dz99jY`da3j77jdZnnmhw85USlNNiQ&DrdaadwajoA<~Jtm8yHw`4X0Jx z&N$4sg2;Gy9e(sauR>fi!S?a&bH$TiogOWZtaY%>S-=?_-=2MHxzA?UEKRRMUa;O9 zHL+2wV{K!T9QY(dto>~1hrQ>4nMwcbzx^fo>RgM6FRLv|9Hma~l47N)wn7t^5H}V- zl(OC43U%%65VBfXhEC2;%feu8<)2J6+OP5x!=1t>?`^Gn&+V&KDQ50l4yt`FR0Mr5 z+0*#lk{cU+bUjA8t3}1Gnh{TmdfRPJ4LXi~K^kj-E2xYmcJ7&W43?&e!zRk2^MCk&YZkVB^KIkM+$o zFC!zXzHm|jnEfZJJ8)wmVk7K@%RUKq;jZo8_Gnh1riqRm8J}I|k;sj3i`yjz4EOQ) z;$kY6#mD`;ql+82pVVEyro6vMvSSE+z};u;Ax^e$Gfaw3{ImH!)Zcryd>|=d;wA2B^X1~ zyvtzf{M@03`sPKaC*M<(W)0NEnD8+EelT6#3`{F4@Z?rmYrqSB0kOlKo1a%w6@$@0 zSCNkjS`L~%7d5_G5G7uoRhIFda1PmM6hJS^kVan!fnlFTV;R4C^@>4PQ*uP)f!xh# zC;J_igD`U&NB=sEF~G5C6u=NG`)}VQJtMfYqPkxaVihhhd$rK<)K!mijR;Fo-TA{! z`79KEewm=07Z)y4_A0i}@P-%5d=K(q*7y!OelK$83kIVu`8|mIfZbfWwq7h9sm)BW z9!l;VUwbyso;=~CRhaoRr0ezMMWWyJ+F{=@dkLe})Yguow;tV{RYctZ4i=hHj6j^* zt~iR{YIeEehO11DD3>Tev8*l`4QZzA;unihd9i}wQ=yeBR-yIwVFDML&a*Az9k}v; z3XerR-RKYWvz1SRC^d;lujw;<1KwlSV z=00Y9eUkllMa~008jRku^NzeZ(j%oL>gb<_M#VtC;#bBc^Uyg%ui4$*_VM zh{MP7mC3d%dZ}`#F8y)G($AMzCCi}m*aoGQ@$Ywo7cIn_oo^w##F%m~iKEmwV@%C( zpT(?f<(RU|%gA*5w#|aru+X;87jQ=R_nC(Z7sAX63o_n(6xpT-B^!t-oJDcBx3&Yyr8P9LV@G`$ zYhTT5q{=#euOQRD^^!8`qcvdtu%L4MNl{TzZeyc&QCXR#<6U;Pcn4I_5>w1a*H}eG z<+FX%1es&A%$n1OL8}i)h=JiDX7xr7To-5N39&7iKo!v|}e0u3( zoFxxsv7fJw(N9h({8AIg%j1y!aXcIKJrrusvIH3s;pS$Se(@s5^>C5acYG^UJjdPF0zdcV^@)jz zGkU*k%VI%?tIbosHdvb0)ortosfDlBZe#^V+88f3Pg(6~AnvkiD9(}sd}iaj)Qx3T zPrHhvQj?JP^P@`BJiYn3Ah$i+ui<*NOEjDvYLBTVoIW~$cR7CQ*|!BdDUwnv*S%vY zEwDFO*lzc~gVU48Xz9{IVQs0bNXEk+J`-vRuS0GqrEhddh^&>FS+cjcHv?&8c?+$4 z%k~~BQb#iS^3C}Hm!Thn$hnEPqn?+WmYRasMSpAo_*1;U$#t;mn4IXzT0pMt^S3`9 zt}^`I-(NenHkx&9zv^XRWMphyTc223lJZ!-a~j^dzsT_QUw*hRa46c-+xDD6>g#&g zj=C+UrmADJ70puIe1-nfLceKCR%vka3Ek^7c^utq!EBY5 zvd^jbw&KejZ$s5NVZ}iiS6#h3mSQkREQ=o`kL=bbGVTSgf6)6Sw_bLOWrjhR%d4ufD$#K#>nk$1k- zRD}UOuPdr(?CqO_<+3cP-t-2(z{SQL6FMT#+e-I|S@u1^-re8N9XrMkD_*5ho)t-r zxwr}3wKT$gJ1A1}vVsvYAw$|M5)DlYkh#3Du%bBQ?PKNX8bk^G0i17ukP(rPY>9jw zA2*w?bEFbEz65cPiuLspV1?=qn}2Ou2JPyj?)9AFE&KWF2W@OW=*Y1G7t5VFD^4o{xShRqvPXPd=rGgC zyhmp9ZW3Ph@|^5Vf5{0ud3A!0bh|ui_^zk7x3H}(qts|Gr=kJ~<9~Ng4s-PwKRcr- zLkN13d zCinJsr;m3B(?xu&dWR{ho!99Y%RU1#Rz~m>O$MczTDmvHd>R;v`h2kdSK8%b|}n{ zO3)L1$!}$;+V8=5z8v_%XRPX-TpANeWD+IJM?L0}ffXQjaxQeX%T&fl?f1#s#|QId zQrU;h}>+*cRi+I}j^wt9`!QOmUnDenc`C zFw{W|yFXZ{8%q~C2%jf@_Y~=U9IJTOF*Y`CS%3ZA;SrSg2$FGICpNOKFJGMYh_;(H z+$B(NXWd9a+@(raGQ&|6@!+6o*4diFg*|k(%pJHBbvr<1?8ZmlVb;1oHRHfJ{A|OM zdiXpN9d}s)9fv$~etzDo%k&_H5nPnw{P^w;`D~udar_ayC^OO#)CgMMV#=%iBD8%> zPnlJa?we}++Q!yRWa8)OQ*0dEvBgDlzF|ftwmcX%wx-U6(vY(9bOUnhC;-y*JL&~_vDs{zULAZd`>CUpr2Y9k=WfM%a!LY;*Zri zm??gLLK@>8x+r*|K+lz0Z5Po7W-3foV%!XnVkCNhvTYh9bhHV)7_KDtgl__7 zODv1Kyhs2qOzfF<@~pv(P@H{baj#;`{tsVuN5+5yj)P+p|B)0hx{-oq2CKRwCvbYJ z8$YeWSELy{(?O%jo+?kriB#hH)9M7qHD@|a*-vwP3z3J)j=uA1@2G%wW5b_A3r&!b zYM+j~9^QIgXFQzxv3ygOdPVrGpHh869N{8SEq~e7#l;p`d6|AnYX`-&_|U{2_YV$5rh9W)?l5CePTQHNleGjM3!u^ee=+qkN&|q$E9=%8>~J$5sUjk`X3#LJ;E`47D(?CIViS z^zKMeT>~t)!^4rd`MD(vR5O6Z1BdChB{3JCj~Ut6KxDej4!!3Glhs~a@Hb$wGwbWC zn;Quxd0AO+YVP<+meNIYzL=&YCr|kd6xQ=6rcA!99ILH~c(BOOK|J5yMj0BEeYvTO z_ereyz^PCNsgF(z({0~bdDCvwYF0Z%|A~3-yB3^7?m5>0zUH2F7-vV;9! zJdb%q5fV4dDby7k_&%>*q=8uEiGs4{`unG4NYC6&iGhZb8=xum0l%1Kb(Yhba9YS?C==P zT4SBq`!efhCy>fhYzaCeK}TfC>N-Btc8={0r{o=%UYX>?#8rF1qrD3s_-m{X_oHPQ zRnaRHk?Yx<>V}G#<%`x(2J-jiMc_8p|z$Fof>n&}k{it_&zDX8f$agszp@y>4Bs3Bd2fVlG7<=EyqlE~YC7@nFdX?c1+g!R+TA z^<-66rXs^Wnn9OD82hB&hR2nS#c;R>B&T7jEru0s`R?-EPZo`s<)|)gQTLoK76b?n z)?8nEyRk63S}aHI;PHRev+=b{J=*&EJiZ|A(ko0Rr5Zi;bIDyDJgWOq^hcr(d2P3QU=qsjcWoCp8F?eOn`Il&p)?Q5 zPvOU`?W*^eQAED?eK8*K6wUt9ekUvUhRY$!O7S)}^U>n|e6ax%*5@%HzQRM71khhvS}NIDY2f;pFo~=cHfm>YnYgTOLB znkQ=O_}`~Kz&CR=x*w1lwfe@D8n=9{&6t?rVvc(Im>R#XUIihyOdJ2&sL6f&z^1tz zY92JU1t5*!jNv68sup>s!AW3nAN%dvp#KwL-*cGYX{pcSx8)#IR0o;fC<;r3slk$3 zGB?hXXqk?$gou=>Vem}_{Ow^uJY%l)CTN9x%syx1^M01yh`E(7b-U6+3nmx$>Rpo_ z&eH|mLcUH+?0QjMiG(Z}4)*ydS18NJ)}seCied!R*3^u42;n&0ksBsGVb-hg9K621 zsW-j3JSLc&nHiZugV5ofea;+B;ZfPq;7C)g%|pf*MBf+6#Bi~-eMHf?r!rre7vsZv z87LZW{@h8#?Sz{`RwN!PehfNC_0r6&ETx&HIy2{^q06U-h2Dn9{UZCJnJjuj5><#Cz_MM}*UKK)5b+E+Ga~!2w()*S9^E z_XA=3=;|yesTr4r887k5->ekPXlH`hMdi#O4c9a)PWU8gA}T+TwWhS-PxhxcN8&z?9EC4K^mLa}C~ZsqI89)zG*OWW z3kvkpa~DU>4pMUE=a!)-swn&NW!-*K^!lX`g8!#fe&-N6`W^;uzAx{(A7kU}JiafX zrtU-ALgvgi;C0-LtlkGOwv1h_O6?n*+;joG(9j?D)caW z>EIx2&_4hATHk>>zbgOK2o&9b>P1SGkqdN72Yk|LDuqAJCU^#C8{ijJR5)W5b6|&V zC0f0}Ljnd(;4OY^7R8MneW^$bUxjs?o4folXEp1RoSLLu80xe^$AV%yTf zj7vsFk+l{B3{#fz+P>Ak-*1+%wtj?!!TLdYKJs+?D&#b{FYvq-mAX4r%rfRB$Pp8^)wjE@>qtZ-pzl|^SL_gd?8e)+5riXKGo{vpsEFW zk(|oMeJ{B?gLe5*$;pBx>yUu(waIm#lfz0wT8he2iAgkum7J`s-b(4nS52DI^yK6e z^*7gBBN+vCxKvpK32Yk7q}oA`pIuVdZlZL6N>lc*=+&F2N$W z9q@^pr>0!^ivhkt^tCi~j|-wXX#pKQp>rvO<-roE>)D8-R!|*$Z7ENv!YcK`@+yAX z4Psn630UBeE)%v=^)<5|y}MXaR24o(q2PBS<6D-@Cq#Ma*ltPEb4}>X!orY+Mnw4b z!_eTON`j!^&XkTx4vDe1TEraeQ zIkW(suPB79Fwg=tjkMBiczY1FF5OVxx`A1>C!-q4q5fD$5VH!YG$sS4nQ=eP{dxl>l>?jw1-Zz^uaa`{)H_l>;z z1V@}i@^-I-yo`+UbEfiPd;Rl{V_GuXQ4~VM#oQQgKiZ_zMVNo%o$T+~QX~ev?Yvbi zYEU!O&k2~*b~jw80Fh}~e7T(}9?@2IBbxCveXCR!rNhKn9~G1ksBYOB0(g{?0&XC{ zsx4+@(h{f0P9%L)QVleGP4(RuXJ(%D+#*<$j2U^MwwB2EOtI-dD~2ohu{{Sy$)eU zZ*Ld;;n^Y}2z!RBU8L(VQKAR6SncRkCGUvkG68Q{2MbX z>v)GICs1gxWH6D2B@Gd6r-Key=d}X8DF3kCflg%}n(^`D_kbW#l8(@73_U2`xd>yq zqnf`)1ND@ODssU)A{9w_jND!;qOG#zW-yp`HyJgN+@SFkLEze_w+21QtN?=_bi#%_ zOK0~wPzKQ*Q9UO!%?rzJ1v9eYsYq7%7=9u*uS529E%9{9R)E;5#%X?>yWN5WjK}Q< zPYVNm&ZpQxqzuQ+$6A}x+z%JKe^7OhRvr$wzARW%Z4^n^xD{E; z-beAsT(0wAJ6Ns>q&2-llHXdrWyE7*Vc2NLEY?%2eallA1U5rtT}{`{XmFw_k#CE# zl}^1PhBWYC22GY>?9OalFo&F3@RV!%xpfRh!2~$@4wW`+%&TJNm{D9e4GWcQpSRmU zSdiXboSXP`4mlqdHnGh(dI%vPOGQHm}G14Sp@r&m29sMqu&GAM4Zgdon zWYYiX)3C=^&^Oc1ZIi+#R%IVP*oiEMDp9qfNoBD|L`Iz2Ads7`>Y02An9pQ7C4Vnt zMf?Q8jk&@zdzB+_-)tkN!uf?Fv-sODpByi+&h)$8q@(<$Kj;{R5qX8CB0Gq}afaLU z(;PxU+3S?3LkDPSFG8l_(U_RH^(@U-#xTw-lv76T>8>P?B93)C=c?jrZaEYE$ei-7 ziu`5Ij3mhd-AOuMTc}A&>vK>lYd!7q%#TSL+XsThjhP(#*XoEW^Q@dQ@>Oqp(?H*s z9~-_*FL%_ZL?)AMraPRM{m^R~pQcNmK;aR(?yFXE@6js%xEOn15Jhle@?+1$=&FJD-*xmS$jmA?@z~CF zEJ<)X-E}$i3QhBx2SiF1EaXUdSo^TdXc0ij*@%zi`Ga%&3+TowJbgRz-uzVNj})gj zG}7qi#430m#aDRY(}G&1VqGFNNsJnq9ZU=Hz8FbchUjxgE;-l)I?|U zRWvD6;3G+>rlH~2?v}nvhgtaQJzifNJLTv^hA1>1{+3%KSG1?}h4#29U;IzQL_tBe zi5QRNtS<%&y43iQL9W_!wOw7hSH4dDh2ICo3{@7Brs_#2-XCMS1CyjzGvD!^9jmxM zyLQAInQIU@oLrc4Q%+M%yf}hgPkHvZM!XwH5z~6Qhg7;(-iY=hCx>~7y}r$V1m`++ zuy(?J#w_YS+w|>LM^_h3nxI!0Z1p&(8;W1<_d@lNwp^6M94Fs&1PLmk^|HLZJCDH--8oz`ojx)JPRJchZ1xPdA9(-%j&Gx}GR^Se5PuaDFapZ|!zgCcWt z6kcrk)8>OW0q5>142rQob(PS?v9b3WTEU^ok7&Kjbt6MtK%k`Zo0sj*1C}I}ITKt+ zo`#S~E6;;Bn9pI5MV!W2Bn>;3;K?%DpS0D}3oVOYGHCZkVRK1yT62ez?jLnO8Zq3$ z*C#^mzdziTHIKZ|jWava3d*A;TMUxLA2gHE=e5%vQ76cl@z9{;Z0&kp><^NKFA&n2 zB~Pv^E?))o@(K5uup>O#w0w_Z+5IK=ZX<&c-yJ)cg+hLJu%LH%AAPoyqBepk~xnu4d*eh%6Kxy{NjDl?|eON0|Cp1qxjb~A=_F&6>DkLDkO|@O1V*(8{ zGP%A%7kG(<7A~L|6^D+31!#(<_4l>e>wh|fvpWA)em!LB6Etjp=}UmOe88eQ9)D^3 z)b@78y6c)RI)T+WlgBueBA1;9wZ&w${AAMnkvu=IxppRF??pIC*h_V|1Q**kCpn zJlUVS)WTb*nI~=J$DP`A&~Cr$ou0Lm#N=M_<-Ea?OuHaZyQs6Qqa)zOls^uoUz_7X zTSj>0={=^4LSFe7dH%1#TXw;i&}MIP_XN9wqG6JL%Gq)=lPbvb_|{{OEE%Qq?lO3t z$AZg^mzHPZD=(V$q+DY`Df~Ti@8o!PMJWh+sIL!a~q4n;b;4&Y-3laTb{SyUJdZG zJ2lqoM@D4lU2Ij5aY#%Du6Hp?QpcO$@g4PYyBaWin8q_|PUSwGA)9#@K33(|qDgk zM-E!In~rxl@OR>AUSCZ0LQc^iWJn9Ypgc~PsIDR$8S?yi8yv7ZHjH;JBRstW7PJv)S+NP z^im#TnirQRa+PCrZ|pirqFg%32{*H>$9f{j`1=qW;9D?(l>(M!(f;o~y)-jc(;mho za)_)#a7rD$3oJ1$>9tB#NV4{*RrX@AkTKCtx7}HE-5SoFw()5(!$oMC;mlT zRTY;)#9Jw1O+f~ySAE2KK`PelQ|8abPv?a?ThQaLw4xSxh0C^38#4U(MsZo>095Mk z@h39*67y^C2tXsATbJ1JjC%b7_besv$WpZcSN-uU&)fY~-dI@$!B^C*TwJ=|^z?F) z5R*ICsl`^Ew!ZZ?L{+rX?dpoA)y`+B_=ev<-$sr1RO1vic=SbJ%k5=XUm|tWn*t*{ zo3jYbn8H?-MXiJlal}@y1KHP+7DjC|-vDQZpVB7dD=<_5LW_-V#aNle8ckneWErX1 z{W}blGx|gb@x(i}PhU$Y=U}~suSR`7+;%1!#j$L#{{}Uq zgPL?a+q5+g{K!L37OAkVO!Y_+JH*&+i4YjsCJCb@ zJ(*GJ$d`x5=%+>ZWHo3e)hfa=;30`FI5SA!sK;z3Ezp zj-1bJNs#c5&8}V;)=GPrw7E*4(a=(mP6~Inms{Pk>3WG1Wq?z*_T?! z_810H&eaVM3mywpKY!R6TLXl{Hs1%`K|Tf=%avxcPz-(A|7M*WSJ#yCg-7*gn35s1 z^l>_yL9N}Iq^8Ge9&)L1`ij+O9zouC{icpLnQozm)}0~P!g5!MPZ}cwbO;O~-2oZG zE03X7?_0sSMmEGqyOiz+^C~HIc0U}tFb2P4%Jo>xxgn{zw12-QkD7mzcWt=8)M9{t zWB=$?cLx1)Z~FS<{a)m(%?} z*~X6ONKf%hG1D?Iu_PV+Ot9UaN|apoF99hyGsH@zQSfmtgGRrDUNYIExg(Yq7AH1X`nQPqFtf}|wYQPmeLn6uzM56&xAge#W`qg4cXJJs zP!sb%4n4Ct%^%VnaYJ{PU5ZD6Z_yq#aBTasX@uFd&drE)^nr_W27|NCZcdtr{+pG% zMRFN#BMm4xL^$0QQbvS;6j}S_OSPK;nVWHg5*MWE_JTU*r<2oHChFWh0Vn0xLij(? z^{#6mH#qT*{&sBcPizZgNQhVn!==649(!MX&;IyH8dGMd(aAkhr{MMCetNj%PB8p? zk^w0QzZTq8+1f6bnj^{pBmN#DHu5M;K{O2|KW+`*q77XL`*|0n{2=Xjs`Nnoa(+xu zupOskoHvkARt__5pN3TJ2S1Ww8E(G7eLQAc*4B>=P4~TpRy!VvCSUzzCRv5v2(9GY zw;G2reI>)ReTM3s3g1N-ior6S6f7F^y4@y~0?F zYH^;RV`UCu8a8V`c)xmOto{`x0@LQBB1eLXYzgVS#yd7;K}|>GPEF;IV$PEcDQT75G!W=j5A#A((sG+zs0G`ik9%yya9q1f4+6@jU^c*-@pHy5kAshkpN^pzFoRDCM68p()+8utjqQ z9FmTLGXFjY_|{h9_rb{k7UI#(FXrf)9Zl%bYrZ>d56Pm(8do)^f9)rOZ&IY#;cY@1 zU4f}&eYPe+BrTNHq>OT;98ghHrDw3tt@?1dlHe__gs8z8a#qV`w41pF-w`;RDj*k2 zFyY%=0zS79v#ljRqe+?-|LU|m`7E8Dr)J7^d-dR~6`j&lQG~l7z(;Xrin6w^irFB% zq*hJMSjFC;ZoCs$Od7uF8KvfESwVxV>TJ^>REzys(5QJ!)OaNr3fB$72*LZfY*sPwn0#{Wo{F+^iuGx{>~8&Hmc7y1Bw_jfU_+eS<7r{Rj4}o7S~8p-(tbkM ze7Uy^URRtly|P|fN@d%oIEf5Jl!G1F!Z>X(dBy0>yiHlQD+rZSCDpFAh-s15AN>n!6CujCAhmoa0?LJ-QC?o zaCe7;yW8FA{>SZCUKpHxc2QN|Tyyc280r#o8Hf%MFTXW!2v$ftW@i?v4^-qOgpUEV z&<{nP>i3@7moab*H!CXa_MSz{J4?;douQM~U(YaS7J*KUJ6PD|_qWbY{bJm4bCqKa z7~(_t5z})LR%zZS-5UCz-|MzlH%3v8l zNZvlydr6M@pP!!}@eq-a>NejStrzFa9iz(V%2l(OoO5lgHu}K#uh56*Z^SYx&80}j zu;6jkXxXw8k5@e19}br-PX~~d;~Jsv4vCs-zMy4Ln;tCb#+WSs$mMRv|i$7J4hT0$nZfoSmQ~L z70iT;T$}3x=TiS+Vy~YJ^T`oc;o<2qufkfS1#(KT-7j9*x>N1%%|bVHJC6-IMzPgW zvB?};vgo+R7{3KyP9I8|tHYXXtW9U~5pFnZ*C?>{wZfB6lgIzo1wps?cRVd<-@YPD zs+td*!jFf{yR|M(OnJ>@%{|7L%LMnTV6m4R9d$`=zMVf{D8tQy5@Xp)rEapG+gzNL zP~9-RcU(yNr>w}mbX8Typ^DToNd;f;Q33n|`%^r#itwHYNaQqgM=NX*pA%mPLrUg|CZXVrTAuPmW=0Qmc^Ss(Wvz`b@Ol~aO+}0U z;;k?u7y!~$JIUVcjYN`(cn{v+!8v@_=R67%IW|UiVi99&Pic%od4gh2&RymI~{XF(V&7aJ=EBaf&6K38a6LSwYs`e0h85Oh#Ktde7cc% zyA?Mr^WGtzn*Wx|b}6ndWB?wM{e;iewiqd$)BZlgOWyuWtc@s8C!#gVe%Y5lbuc*I zQYwd4Q1FivK_@M1v8wEz_?u$(5^kJ7T%SYt7UG|3h z+=7A%gb@RxbQ>!xqN~j|#g(hB%(ww=9ChuN+WJ4ov^|dWumr|#3JH*Oz^AO>{*ld6`@s$qO7L)LuMajwbk!9sTR7y0WY= zOJ@>b&tPI~f=XOyME!0@P(3B$pPEs+^GD81CEWAw-JeP-ZD0hhyB?-9!;n?P#C)LP zbO=fp1Ac81OLJ7#&4`wq7_=-y6|J1C);OoE&@B07@yhFe95g>&0WfA}P_m8)E-X&l z5U1_Nh~O^UEZdsRos}E5Zi~H$%^_l@pifMdUh5yHfc2=unZ3uX(lhM zuge}X>6mEC-K!}+*Z)i`T~(`H(0Q34-zqDg@0~SkRCG%wTE5zjS3aNN<7e#)z=N3R z+5kUpTao8;JN#DtnCQV}laAhj>plu^=JiYXYGiEDt zs;mgs$qzx}W*7Ju!P4Z_d_U^%7YU|gX|0Yl1?7=+PFLw@eW4*-9mqAIQS`^o64lM94VRP<+}*Mgy=O`6V@zRIU_ z(HZGTNeuQ%TvGQ_RMs8{+3hLR-|3tbVgnevp2t4N{T?UM<1cGM0kYBB?+zZ27qS%SPCJM61Ewred}GK6ixWRpma(33BEjgtrw6~Gm9!o~1V z=+aPZH%=$Gm8Df7RknLzmis9S2hn({*0Tf};%Cg3F8h3fSovU^m)>vr1%;pWlSy#3 zz9x|*^KRjF-OkYIm@^Bq$iUcjN8{mh+1FR->}`yxB@%U2l}P#9;(H!w!uL$U_4^1;?7P`X)#>I>;;{fYRx6#Wl8U-SMO9S3jV^?k~tvN)xPlJcq6 zf_*~Q%W#vMpZ^b`525f-z2z<jou6tulZy{yPK@V%_Mg^L{$X3+;#(bNE|cio|1f-i;VQqa^0PVWKE?g zay1X)X_wZz!jBBKG%<;yEZ#6Y%(%lxb_ykAB)n7(8#mxaE1Ir#n216~xtrbF!;v71 z32Prs_DtvEDiywAdG3J`?9uYX&^*Y)jf^LENM0@Y#nZW}G4f~Z7`uomgZrV+b$Xbb zFkG?}f8&|9B%u1EG0WQdVcpG95;OJ5fMmomf2}u51_<ahinHZZ@jrQ!7BC=Nv()PTctOcCYKhJ~wDJ`eY^;Lp9 z54BLN=Oc9|3`Q2nh1c6$@b60e!L;1&diN)pt3novwM!vX+%oo+K&Ls#%g?BHJfP!q z$)6+TT9;)~`3#Uu8kMV^PJEdHK|kI;50arWnlQl6DLLJkS#5Ska&pnqOfIAY>@fZ% zWv1^=~a&fC_z`LsHK5FBL-$s!kO$t3gaPh&1nSY;B8hzg&iZutjw^!N)swj&w-nMtug3__Gc=k~}B&%5YC)R4!QMv}& z0_(c8Tc_W?bm?~rn%U8dprhwI7s?7OdV~N2?b0fBV_JJ!Mr4&p_%gTCl|k2Pd#f3w zss@Q;QN6ci)!0I*V{e1El})Z5Iw%H)xXnh#dU~+vBa-R>g7Y$XQOVFlcd`AFai!rp zn_%^znM73ZMJGJeYIeoLHFP?QdikSQm{7Qhou?mlhoFkZZ%;dU+L9R<`%f zfMw&Z`{|@xROo3oJE2z#OV_c@;dn>NVj)om)YV9|)S3&$&)StAvE;0GtdzZPyoTK6 zquAbdrXub@m-s>}f#xv2MktRh*0dGi^S(pjx&4HFG|shY;?q66Yc4ujhcDIKX<$xj z<8ydrIRh2WQunZJ5xi4dLS~N6E)mX;KLu6ntM6}Ry*SN?*|6sJ@#z+nA4@G-FF?T{ zo!Eb3Oh}>&`)g|^2;%FXV;`#u;pb_CKpSS|#d1vLw2ZVobXw^)?|oLn?~6!ymfUGQ z;ij^)Sgv#;oVaS~I2Srn0YxT21VN$JJwaV)DhUgj2M~6^pij8hOXMbLiaM-Q)wZz- z0!D?YDP|;OB*&?U;S9#cQuR`&%crdcmAr#GsZQ75j2S?lZ=B-us&Z#})R(L9+Nj;AVbKT>%1jcSE`U&1L)7rn zHl;Ifb5E~XzQmlJ7R>T7_aIBepvyn=N38{zE_8$hp-*DFbWmGmDm5cuGu2VhA6p>K zjF&XotoDKrg{zulloB_5AgepQArT~HVDi0og49GdQ|k{ks?aZw%#0Vw-Rcn0e4^u? z-C*Lz-*=gONtseLt^KEDxfFY~jDaV8;rF3>ia`0jwLGW#1jHG=&X6uOe!XmuSr>38^OkGz0-B-cXjSOES*t^9EJ8q>6xzT zs@Gj3*OE(7dwDvXE2>)}V%)l&MX#L)U1cBTFec>|T*BmaEfe?Yqo|=o)$TS1_(G<1 zr%p%2j_?Si!4Vu9bmSNx@<#6jPj3zrQ?7mm!smvu8sw6JChmx? zqGg3AEuVWPoZ%mHtpfc)NnX z;9S>SMC|4j+Jc<5soR4p#WhFG)wiukN6o!{pj!FijXPy@`qN@|=!kUmKtCBv`dd zI(@jTCrNde>pT#W=pc5SeFwatF)cyrkZ?$DTfCp@JodkGna3+;@(-GzDv;MK&SvV@ zBR#`ULy+&HW}wvVjA*b;tL#x|6cOsj`H1(H+roeUyO2!MI3jtz+8nD+Ov1_0JVNoIp7K9N*cQ`)(UX!b zd}%u*x^ZX!{jq=YgYjSdR1?~|m4KR|PBGD>|33O2XN47I`6W0d?}{25A+SdnA@;}1 z>0f#zT#_C*g^fcV^)`2lxQH(og?Jr5p`e&Jj4e0GrZ!jb ziJQsu3pE+>9Y?D^Jl2LS{_agc4m{NO zrSAibH)m;VsqjicTA9_#Tnmuw%JXnSo+N#Qn3i<)v2qOEu@Dapl`lGqP=wcqOH5Dk zIJ;5VMNi%DJ4V1}yn@Fw5o_zO4im!Wb3M-qFNI4!-e%KN%|zCiDnPh_)p|}na)5{a zO8t4Nt_o8-0qs9BjAlx#UEPn~3$M`kZl<@!xgYfDmjz2c&j?G7-yyDJixx^>Uga=+ zF58+{Td8(s(z4PDkB&556GdiAREsC<4G*4?@RwNjkLPU{_VO(-3+h`+eiw#bw%yw- z%jGI@Soaj0i^>f!(20mh{H!7V9P51eoi6{dlf1C^s!qxsF<9{Lf~Wnh2&Lm&=$$iY z3b&)7H_U>sBCbWKn!(m+87}V0w7^=G zwclVr501p^F@)~@S8h!%R**?Tu=Dt^pe+s-Oo^JGi%%vIz5lpPCqI0Y1-{I`NDoS2 zWFft1*ySA>Mg&9xFN3~RzE5_C>-pT6)gifoD}RmvifT>WKgyCW+84Fm^l_zO-QCMb zWAwi(2xsGo*1Bt<`qp!T0@eNjPICicnvY3t`LxtT5i`jT?K0qZ<-*Frwz85RU8N zc?bowmyo>=R#)9hCnKNv%Y@Cto(XtTy}<&Wo^G(eDNPLqL9oVRe)cYMB=Rr6`X(t% z=jr*+Dzvo@XR?ibUG?!VLVkNmJ~?8*5H>RDH6b0JbcEXU!g5sDwr!}O`+{8JU;Yzq8o+gY4dsz}=#W0*`29|y^yWKtjp9r{e zRN*dbs=g10@&z8H=iK-KqHDM~DoI^N?iBqdJ>A4$#K_-GzfGUpE-4}-nBQ6)DO*F^ zECQ~*yP|S)3`i}$3-B|cVE;sHX6EKC+bNV|mYh~CC(uzkq)@GTDKb$RX`d__MPPkg zIdKPwc#kwR)=$Zd5=T2nuhM*dzIAd8l|@ahA?hmc`pWC_jW{>#kz2bRyT#_p)Yjr5 z{?$58r}wh2=&)ia&Zpfo9u@zKiAa$fYxLD_{Dr?{(HJ<={xmZoDH|zy@%BA;+cN2A zI44QpYDEge`)lJIS6Ny)`m_u&ZCckpaLr@!uDsV_eW<|e_(-_$I=m~R7k+tZmDHxG zP-6{4w1!OzQ!2FyKHD!&SRE^6KF{AGYCe%sEO53mgqfW@X#WP%c zK;)LEbmv4(;3>&&l}FyFrYLzB@&YTXjL@M#Yk6s#y8ez?UqOr1$+`K#!O}xlwVi)= zMXrt15T57mAHddAlN<1MvHEbjAn!V7EvyhjBqUPZb%MW;I9BLuEdRCON)ZIC#jAXO$3#493daPAr^Pu3 z_yeJY?-Ex0o!o?n4skk1o$oGV5nSbwBzf6!8Esi*<$Or)E;>6W@1KxVlE*1MDwUTY zbS3^y3KzNgW1maWupeaVXJGfJ5y2iD!An`QBV?9b5lO8-JCnQ$n3X?|kmP6fT=Bif z&_0SexF2}w(9dpsX*hF`o#!M-lWSZ;|08Ky0ugxDdHYDK8}Rm$=)_DWSN2~RKvsr!|_;sbogPyQ0~K;M*&Hr9%z&M zCi74(~n*bAZJCctwEAX&37?QKW zZ_B?ZmYV`WKyD&q;mpCtXDv&|&)Lgb_Y)+FF}Xf6wlGaadLdK8hVVrK3{;o!h5 z^)Id_9Wot;Wfd6egqZUjf$#zDV7XYoDZkX4FNQpJF_xc-t!(I-@#O6ImV-hibWh)m zXm5RKWG!aAd`$s;N#H!vT0eNe_xqz94Nu8&C`b=?fk2b{2*vq25Q)g@=+M&*jE9D% zC6C>zkNo8epzB#uLkspyR#!)RU1qC1wKi(qleh`PeUT{IV1A4E7+!wILM4O{K!U3EnU^}^wYaz8`JURk%(?sCS97=V_Zx# zwkt>jjN%*wtjFGWc#P@N((D~+b6%Zr=Nl0zo*M6ltl_D@GYW336mpqwb_OFGTwXX= z>g|~R#UX$TS$h`B*V#8cCV`JW*$lW~x}T|ad2)4Y!mBnzfXb!hO?)X0jpznN;Fd(7 z4EF8)lUHj?J@b{e?haT2Aj1^tCnv{9L%7l?{JF;3erg{;8OY-7@%@8T)_c|F<>;t5 z%S4xdEu_t>t@P&FRN}nd!oni1sHm8lAA5g~VUN2jCmVrtng{E`X0tQ>c<#5U`Eld! zG}v8P>jBN)~G;rMXWJZ9tX>AEG% z%sh3;KL2qzog17aJ8yU7N#Me!Qci!g+fiFC2zZfh{BOhr=N9KH{|HW_G80dQE7+gx z41}wCR1$1I&a_y*MYyT1cQ@N#dgK=}aBnjCUMYeAtxIc1b*ttx-x^-<#vkgDAO)Of zr?_W($ic+=h=$-s*Nu}yCNGmM`TnK_S)?jhK2nbr&3^|{dA`rvC#uw2P0bA?vRwd?X=0<+;~PFuh{WT zdP8kj{Qbq|u&#l~u^SER&V!dzO;-s0ty=P4m>BAWZ9W(((VJ&uZ(=eyLqI!DQ*xFK zhH=}I5l9dM;+M9XvH_auXa?!wAxRJZe$uFP#+8ASvTw{_vA*sL zLBH{M+WPPB?`N0m4@=u$@VFelwiel|tBfV>PxLpbo{J#h-fA!UP((!$J1zHNaRXd*o~E@Bu4$C9bs^hs?LrrvRl_^xnvs#snt-`lJZXv!2)3D=;*YUf>P!f zwRYAv6EerX%Q%?@Ll36v2lO%=N=hC~Lq^(sSW(C!R`+v#CM4 zOd4NaWUMq{X}^dx1{I2ERl~|im_h+YO%*@=YO=iiwKGgc_R-)8cxx)m{_`cP6;00B z{nji^!6O!aE#8=qglAj{!nu1n*TbI@==Acq#Q3@A@Rby&M#&ZRQ{RHynugg!uWu!a99rOl4_r@bhjzZ4MX;;~Yh1O>5Fw znjg*v6D?ABVfHwCZ%0=^{DGiMU9OfZZ4kJB{ksAaE1`*Nv)+`HZWj=BlJ>d1hMg}v z3XxNG+MD39FXnb2e3qSsQzV7aS&5xswvjryiEpr}`G;j*Q>Aw6&+lUcI>sds?X%_+ zGh@{qWzv^45?$nST}XCH)uDy(+6;_)jXQ?PRXQyiih8lJO-&8TiM+O4rNf6{0c%z3 z?V!2k`n3;IwD4MIDvqj-ot#gG#(EbSyluS{ zAZP76cwC;@b&o*?mdX2hiS*;Fw@qt|U!S$&lCyEoN%$-``LEryq~D^Uc&oAM)?Y@6 zKWZ^4?x^AEes1Hf5v#m>j57e;T%zt{**|E;iE*$vw3{rC#g03Nr_DyS z{gnb#AqPWv?s+`BtZZ?LG&?pyH$8%(%kPySTF>?k16Ik$hQmf3@-$}E&iLaci^#c- zFwdPVPg*hVtL#{5S(|8l38yD$8|EnfK|q|(?R$+1~yI*YQ~iM+n{Z$I4(R(ZX^$W*AJU6Hg}@}IXMEJ zuhku|@R@vW0cPf6uFN^rxokzP{L>6C4r8{S!C+vVc^mYdg5I}=0>@YGjtN(T1$HiM z+Jx*mw*4vjku**E6Q5}Z@Av*9)!>aAL@b5N zLZQCYmag{}c+4gKLo7_vPN~ajXVc?E=+|@8>)@qH(}Py`S+6rZP&^8$;{-}Jm|VXR zz4Y;VIEAfYV`M>8@hum{N9gTQ@s;km*6%L=_Lfa?HeeN{=FCLK0oD9{DTOH0l$1~D z;W8)o<^nF6O#{m`{yRB^jkJ$Vz3-ybyD(}JAmLNdlP~HHjIF%TBJO-!SiL>Kx2yG% z1;h-tcp={v$Ai%6Pb}9u0*Jgp;Lnf4e!qMl!-R&`mFm}XRRTitalXcfJb7%)gEbsl z?0mX-KRV(`?jTXUsAV8cDQE2|3o_(_f#8WOJpn4GB(|kZmWPqsc=jJR^P@dgi$>N6N;6uG7FsQ5YX8u^wGF0c(v9A3o ztq@%=AC8DnLfF}LO2Z*O)C%3+MqQ6zfPxeQg?0dHC9OrJNkY9VJa0jlp$(((U&wt< zkXuErV}_Q52Z@9Qk8_WMWXf$tg0aPuS^0G8)n${OD-3YuTydznAW%-}k>&;r1WmuI z>&}pQXcyK-#m>sN3&>eU@q=Z`tYkX4(K#k`yKbMB9KPX?o7T-@s_gf7Q|ny67q)H{ zCErWHku)~wj=fc`|Mn8N?1>Sg*SgYp3TB)86l`#(_hDK(N*^fZ88X=C7rg>?wR42J#Go*ys1_IISPfxPgV(@W6Q$+} z+^46MlHPkKs){fnaJZRM)x$bez zUbWuffEEnCjg%&c$j`*$8)4pa)MMl*G5rqokCA687gbmW^LlmsymzpZUG#8jzE$T3 zXJsjK7>1hG-Gv?^r1KW~nlc9OKRf4leG1-WkQWpB#P~eO zv+d2_hBajEuBjjUjyg5p4M0!F8lCjB{f)fW6Ut4QAr16Z8;JGf;n~mOfz?mMA2*8oMjiMEvxi;6#2=5b7(d!>hxK0}-u_YvHJTW8|9-lCyTlTrVyfP5I4j%@QQ9}s;3@PU=puCO#tu4zEiprWph zlBrs7bz3^?d^97mFdGvc>*VGBS!Bc_t~4n2ry=?a`@9RQqvSEdDp|2`EO$P((nU1Q zH5~DkH1|+l(&&|p)!LjixN{OzK*-;MwzTuM7X{Dfqhio`I||K=RtA%$Y^!c7_RZ2Y zcpxt?Yu?D3DIN~qRt3$;l)wQ$t0iz8-KfzAq!4m8tUCc@!lCKv zhn1BYxE8rAds#VMX+uRYM1cQ9Tw5T@5?fv@ScCUL%j+b%Z>rj|9N#(kVQMzPTaHV1CGFv~C5IK( zoztjrL*P0s7omkkS=rbm1Ox=uP+b`LhufSgbi|j_1?#O#>phLNQj3k2UBKdEAPp&w zSllrQ##`-C>TGZXbz}1m%;IghcnXJ5vJ=~$wJ4{#xgfQtcCz`(haB8>9Mpq8k^i+6 z3N#Rum9Q9h7A_Ik5ZF^+jg~;vBLy9IeU*wOF06}C!K`V#{2lo7WzO8)+bB?dZE65% z6KP~aiUEj}ECu_@L3w6os&j*=ndplBS2$t0cm+`IQD)bEh>w}h9Zt~%N-hu@PrEcm z>Um#LxV-kC%0X!>K&~H7W))BU`2EQbIc_ zde2pRzNb^-*OWk!PnR>YOiVlmpVzz}Z-hQ(0&ST{?qyRI^>hHfnYh(E?f`Zq)s9$L131HYuog%HF`HTzsifa=B8?PKD5f8T-vTis7xnxS@e`7g zeq9?+87b1Lcz%z@B=EfCyIp{`d{OOp4IahaTH5Uy>{9a|6>#1fRwT%$kvO-W>lo~q zy(77De%zk1t5=j`yvlIZ+MI_$wbQmnwA70~iBU$4D~H7V!r&WLex0B){d zex0*ov*bl&z`37gNk5R9d}OE=^0T`k2eL>|n_jNcH$t(L9oTA>;X&lPb>+TJQln!w zXyeeE$P~FLk)3F+xZoh^s6 zn;-o`(?ajFi#O1n(S8;;JKiJ-_jKXJC=bQal*|16n(193ioI#=@X+dP-Hjbz>! zIi$3-(^&QNbqI3CwK-LEeHzK;DxDYC-AbRP`z0z;c&lnYIM-MyhlaW72o+a09$JLs>A@O7rpw1MRFL%O7O=|-buUQNAfS42 z$7k?3C0FU483k6W<8?IM8t(r@_(@;afrCHNNLuVqNcKeq^l56^Av{7hqEtK{l(3`1 zmv|!U@lN&Q&E*T8+MZ3?x-KO~c)uIG2`en#r6(xQ0g0h`cDye)j4=kuA_2~v(_}Z6 zNI+8X$K=5x!MBn(!wl{hM4GVmMUuNb{&oX&%!!#758}(XFjbTYKIORRMPbK;hP4Fx zv7|#c({q|x8W}E~8DyT{v)lH+%*^{TN~NHQjbr*8D5l9m{bLNG-LS= zOD^vI7Z$3xcw$_lLjOs-MNaoecGA&QB+j$bEUQyU@dy#jUF$a|2t~2*9m5{$h+xFt(KgyNH)S32CR%Iwio&-!`fq zL!wDi;5!ZuaeLvnE#!FbOqvJ26I&r@8xsY_NPgLS|5YkNbPqi5?;W*T6^`KrkZN z|EWKNaQ`%Yc<+Y^JDL&NwmBE#dTK(-!>9p%SKM=;;*itND!96Ta3 z4>(v0076c?Xgs~hJaAn=`ZIAjq(d!-&Ez_DG;7|X20lz!(|&~Kisd9B2FGU|TUqDJ zpOqucEsE+wkcgh>%2Js!TDN%4W6%m8Qi}#L17C+3J9Ovn>2k#&jVG&(7<(4m{nNpf zi&C{<$^2PkCn$;u&mnhe<*QaHotY;=F$M-IpRO$MB}j6UAkoe3y?DUkubP@AKZ)A0 zVWgFx$iJkS_+42zS&-P&wCS7P6dLUP71btoYMN|^)XX{(*nhZ+4ds-YpbHRzK6aUmo$=2K;y>VeAFxHc} zk1uC!P{Rx(G$!){Yr|-itTQg~BquUi#Bt~nk1K}6zh&S3Zv@*fSEr&6?I&=&AaON9 zWGM4q+g8TJMN|fna3qke;V0Ga z&*oT|)Vw_>$-Dc=qJHI&8owXxgU~LXPm1ndkt!NT^ceb?cbkUp;eo}4Z;hy{vXa6M znjkjC9=hfCU0tIK$6Bz3qfyk5l$3=nW8c{sT^Viak7&gxr~XV>9j6^F?U*+)GxTT) z8dQ`U*K!QQO+N#abq^47S!H!$WC|~cKlvC2I<;d?G*-9V2CANWSzZjz0Lt@p$)Rn| zA=T_aR1120HablhIk7y4*}wyZwW7p|c^aW7pKT6KHwu<-T%12o4|~=ax-WyXQxQgr z$j3%_p#`+O>tcC{y)b>q&nak0_}O2Ta<0~%rBFUXeysmRoQ<--+-Fzy8qd0x%-Y9W zrjfXXnPLZPlgU-(ueHnpB&BNr!^xU}eL^iCbNUh24h1!qX{sVw?;VV5OW*2EouA+` z-8VBeX%(DPZd3C?O|R^!x`uBo++X<3L@yA^@%7jm{}?W(-WM2NWfW2odaCh>r?q+a-Jz5Jsf`ZOFG(Sa$?Ca~0c`Uj2*1eHRa{ z|3X_*-{e}W#fob#e;rRQW${p@+hD8fqp*4NgGBackrd2DOD3aUi!e4YXSk|`TOiL@ zCX#;Kn}fW&*U8V_CQVb`BWhcNJUM72=BmqfIa#PpM=~*gc{tnN6}?FZga%WOdtW&0 zELC2Xg}h1DL+ARAWAC$kEhV>`q;gMxnfi}%~P>Fb&%7~zDL_e|TlAuR}A!L`ev zB?>b(jQ{Z6kE3%7Vqr9)ES^286P4a*8on(x_!|VTPdz9ThS>&(r3L}0i>V|)vr^5l zv7YJTVkyXA*tYf@gVFYGQkjP);z~ig>A1g=JrL=nz&^7XL2)lmp(XB1)r38fhK) zE#nx(D)*UgF8`=E6z^O8DZBUQY7F`zJ=(b3kYD?1I#(h{y+Us{iwK} zCV_X|_D$|LmHlhd=87*>zuucaE5$9&tO4PlhJSk4!G#o}YLOFsJkWhmbN#G>qB>V5 zk5ihiIFQu)y*9incnt;7pwM|9!)KdcoaGq>)Qyk=tp>Sl$J``GJYEO%=#b8z*1LT8 z=D(>k9sjn4+>-KrtR#0n{)?NIk+m>E(sW9ZUQ(&>yGY%jL2tmU19s)dXvi-AFS)}b zT@jHL+gV+N_ERylykfSlqHRcHnX`I3&7*g4*HB-NfatKpOu@|`DvD4to!eyhG%r3W zsxdDcNMRWVH$#i;tEhMM;}!9rI5D|3h^#mG|9lw=JxRl@%ITR3IbP^MvOepGXKRqj z{-g%~*SQ*|6DR(!hu{QOO`X}cr%9BpCuYycJ_YS(6+brgT64ii7DlDl#gFG=HE}X9 zK8BV&Y1j8op6oaYDf0U4H@9q^cmq@uqTolT?2r8PHfmSWp7wX3mqP0AGP1i*J))t7hqfH9 zIy-L7oNH=K;$_q|IvE6z>V;!9weODROYQR<{LY7jKqHRSx`4p#ot<}(p8K{$Q|MZg zPnhR<4%ywR#;l?y`+-@`V`Ad$?TWSCOu8L$Za@HOG8R;1&xvv71kc&7V>Gi9b-d&Ap?@c+to!U*es{;q zvK#M_Ebvr?ON`la9~4dAJf!$QKMe_)4>WQ+W*&3YKGsVU7Mo%`#(iz_E!?)Wu&|%B zq0-^}6p%-jEp&NdXhWfaH<2Nr==YB8Cqbo{X+lVy7PK{X;ra7*yI%@4`97&XrRcr0 zIc;rMp%X;&YB-F26b)@6PUoSA%zU6Ic(v4#ysdHc_@wxOhW%~b3e@49^nN_1Ux=;e z9q&?I1K*zY1liMeIi~*(|JLXCX!^Wb{kj_wBj)F~iG=IK{AxJnUh z@fWz1WS!7~<`(AK&7zT~bKo|-33wM?&fC@3&+`SmR+hg*0;jr{l|_(U*DIIv@qkQO zMO6_MkzYpF#iz-siOkhy`9XQ-C=LqfR?OF0jld0$LmZ#|i}wKJ@=5FnQB-QESMd9< z=5C*@qfw?0R2Dj5N9@m4nj1;AB|SHA851m9Mtv6qk*vdSJg>s+7@f~=+P*PxOnd!!JyXH}!PPrwqHz<}18f$b-lgL1qXki}@ms8AM>)G5Mf%-z+ONv0Nit~lQ!<3ZZD=8+%TDk~Gm0^D| zYO3AkZ|X}BCg`NP`#()oclURW_K>2JzLyFlCYoHJl?{;18Z3lGP3zWY0rmb$*wz8i6#!Bln-tclf$hzV)!)7FC@ zF;rwE$Xfq}HF*lCD*XwLFN8g%3Xu_-{Q^KPe!U!pm4|&I2o8dn#_+k|_>^>EZIifoRje zQZ=_v(UWf+C?_IIH&3q_4n(-PMF9RDWQ}=@iMqMo#YV+bQz2)=$^LlRih|LZeRo^k zc@Le*x4Q*j%6+uZ!d3(aZu-uE3dRDo*QUa6?0K;9Wf5kB`_vg6)wCPCDDpGzH znj*7T=`k1%qK}|dW$JiDTNH?nRa`MXoK3)I4IckrK@;kf@BU@M{R=t<@?>oyQr%r+ z2~0qaTKoNAe=Ox_rBM$LmoV2-;(Yrg1}v|kAZo!* zqZ-x+-Da~Xy2;i?wVSJCSk_Tv6ZfeMU)|>i0SWBUaof=D^$r4)lAT?)=U>4cW*iCJi`2iX zDZQL$0tFMEwzN>9LV_&4xLzjh@ym=%491$sczUGn{^g05Z7Z(F&((n7^L{4a@7vwo zJzMU_0av%gKioruUE$pT)%+M~RxBa!e@$k)G(x8|J{HnR1@>ejs%&ikti7(4S1=H_ zx3h|@;FG9WEwJus-udnHdiuKGM|BNz1!Bwbd8^W_^nJ613MHg!ZHne7j_Rtu{L$ZP zcC2w6u~7-`^7FS*`Pe3YkB=b`6m`mFh6)-FUGL&8bk;zYZ8{rImWOvb$p z#g85mfrq}x+xcqWqz(5Qq%?7-$~={88qtd@4^@$$|N27z+i8XrwmTdXI4R8B({?A zS~#GOk1%3rCjvA%V;n0eURkMKQc|)cah$>=Qp*baX4P-sdTxHsgchxIxKDT6hrl!| z^nN1*?9e(yW)pWKMzED-EKA`%U-ww#(FB1v>Hj*@C`m3gW3@B~^x|DH0z$&+$x- z$1!P$4h|Mt$pxC^F)xsf&iwBUkvZxrq+nm^-Y5_z$&s!Q*_Qq-8ZnhE=oD&ZR%H1D z=(q8DRc-?u18WQm%(m}0tndUTWR?zW75!2%K&3>7aCO%;9x#8=Lw)AC#-;HX7YB{%@P7;o* zwK=zGL=ziQ`KWj*!S6|cKQ(?@nUUIO>)or==YjED+#1Vj;MaPD>*#O_GJllB52i)y zDUoKt!~@h?NicQ)s{>qEb>6?m1hiz^PSn@fwS`o8PL|c)o%;W2to-kn*_OpIn{x8f zKWnhDQrevdTU?lZ76n@x#yeEd>CZl2E0AlDX6-)D>IU1_-IX=gZK z#6o#aNJ!}XIzYo)1(7gYJfY;~hBE&5uL@cGm+E0zy==vG5*}9fSy9mc|D`~4SK(2; zrTfS&)JTw*#C3ke8j$*)ncKr~(LKv$E1pz&smg3{v*SBkYYj@%PAh3@3gue}T*Ll# zNFR~I^onP45g!jj3X@6t%&N8y(mRg zokAhCq^N@Pzg|u^iky1&0Rmi`e&Z#_3~C8-7QiT00C*GuW((M7umOOKC=mP3S99rh z==TKb<5VHLlL5^c*2o5vt{Vzktmwv7tpgq&ZsGg8;4$d*oA^7wF88L0zx($!!!gjz=|$}gp543Twe@o z5RAgCh>XjLz5Y55%i;mZ)9Jg{oKlIkRO!Ik>|nmYG*ruRRNI}RzgTvl>P44G>< zt`QDfkxQ=SG?~kUIGhq`4RNaDl4i(lvYf~z5@9BV9+i#Oh?7gRsm&(IVhM}+eWmHQ zKfn8Y-rx84{eFEekI%k)KV9nJ>F+bGVY{$9kNj(HYwH}wWSaj=La%p=EG{j2Bi2QL z^4raB)X~vm6s0V5eWvD+{lYg<&}WGNS(cb$XMzDw`scJxPjI=}-0?}982R6T8E~K| z+Y&jznn$&t^#?0gL&1leBGZAIZvfo8_|>g0XjN5}JNur&y_&kZEPefZ?KQjip6Ne& z6jDQ%l2A!v+<9cArUQVBBUpF5VQl{a6DzADzWGD6cZmVmrHXg*g*10h&pM712-Ewg zgopEmUJJj0G!dx$B|MlHglV{C_1c4QrEhCmOQNRfm^>&rpV0*-m;JJIkw^kT?bJ^Y z0?I7;|0Fty*2+XL zYk_=NdrSC#S-XcU+E!Y7J_spo%g?bgYU%+B$#Z&^^N;6UA^*HHSAkD6L{xtv7QYE5 zW=EwL>ymI@+J}^xcaOOm{C@m(s9uiNf6Dkh1V*gerR@uQ_$c7Z^eJTL732KeJPQ1nx?IjQ|0MX!WkZk7~R~H>J1DQaQa~ zhnlwV=(qWWVdw7bu&Z)?{K(ZmYnEp@Bv_j53v(!Wz5Z4~li&wQ=sY|(gf-ky_V?Y8 zXj=9J92r6OZB{byN4k}t?URLsrs_XAqXP z7wl3tqzjk@$lWUWe3m2@wJZUoZSz`s>ydL+F3E;8$jytfA_|$KeYvQX$t^Ov zSTrUH9q#gYSLPL@xzJv^#bGmf&fBB8C`k&1oB?oAHf=^3-NGb->JYq2bavT#jkS+r*+EH)9m_z=99t@*ytc}8jnw>qM_H~hS?MY{jC zmM=|_&(;R6XSXXE7Fs9;uPHVKK$|z|-y8AK4?B%A%&)<*q3UK17#8kg&@&ThrsQ0; z?h&7H^&e48b9~Ueo#Fx1Pk)v4lDl-l2+Eei@gebcoq`HFSXRn&R(GSy|4J#rmE4Yms`zXq^?QO0GRc{mNB95cZ+b06`oEEp zok%P{COr=Li^`nt%JIO!Rn!aFUI{&U44Jf*Km!pHE#3mRkYpG4dUdw*CWrHM0mo*u zJ$LB@CaOclOzp>e&#C=%{rt;U?gO-0Di!=diRxXVhbAVNuaB?}N@=ksisOP8b;r3yV{h(oEYiTj#qeG3`Z9E0l?5 zTm3{`_A8p3zM(eboFGO2p@E8ft2$FQ z#WU?gzrUhTfuKn>8&k_}Wj<`U^5oRiRH{qK*b4fYy>oj00bd8q=!xUU1z89e@uM{&e@qaiL(4jut;y~Z7wbS4c{u>>4; zvJGYg6(4P3f1?E=7n4&KP-xaXe>e??EWR6<{6h{s4dVSi>+k~iXL{usXTi2AGPR7N zz_3!tfdlLFfQCk5oVc`5%L16But$~ zz`@m&b$krt$r@EsjxYYnFdopoSzNgMC3+7~b@WnSf4@UrMsj1Iq)^9`{CB(+0lN3b zUVIfzg)cT`e1lS3OEoS?2xhfYYtA>+*Q;TAnGETxPLQ$&Y(H2y9t|Y{Nci&Vt6R1X zaeJ;gPcsW_-4G_uT>(CLu1(65&QA2ny#owjuV{XK(5R>n)VQ~8 zpW;qw+bcC4V`+YcWO9-*SDiWx%JdZ6Wz_PP~Rw;2fuiIu{CMmgF`t*xyQ!)XE!2&m3wfBqv#R}exN z)Ff)R$@P1{cA~2}toO!xb!8=TK)sbhE+{TPKS=k|48>2Nvwm60`E?PU z*i;`Mui|%c7C(_wx6GNJpU>*)=~?OxZK}>Avose2G6REzGI~@@x}Yz*e$>^KJOUIo zJZC52O@+-&VBjNe(@L-zC5^AwvIibzu65$?4AwLf2p16A3S(89zOnsaCqXB^hM5aQGKB$vLgTCQW;M@PCgg zQmCW2>~asUk`dGK;pAc;dD%?wi+M;C7S7YjHJjn-ouD?10qZmU(xvCvr{Hn+;Ume$5Wq z1N@u&7Yksl20IJ~yi8cB+yDPJC3~@9Zezl@wwn{qa!Dn1>~?8kUQ)x-u!8 z_+!PvU2;u`X-+tH1%Sa7z$W#wY48GDtvJKHZmA8H`{rZSL+u&yZ@}Cl5B7=D;fQ@+ z#*dTR0(<2|Hx8~gnj|SHtT~CL!pN&8V&GB{;NuGOgx+@wPX8a1 Ct|FBH diff --git a/src/css/adinplay.scss b/src/css/adinplay.scss index 8b69bd84..c0deca58 100644 --- a/src/css/adinplay.scss +++ b/src/css/adinplay.scss @@ -40,7 +40,7 @@ &.waitingForFinish { .videoInner { - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); overflow: hidden; &::after { @@ -74,7 +74,7 @@ .adInner { @include BoxShadow3D(lighten($mainBgColor, 15)); - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 15px); // max-width: 960px; display: block !important; diff --git a/src/css/application_error.scss b/src/css/application_error.scss index a53e4aa2..b69a1cfe 100644 --- a/src/css/application_error.scss +++ b/src/css/application_error.scss @@ -53,7 +53,7 @@ font-family: monospace; text-align: left; @include S(padding, 6px); - @include BorderRadius(2px); + @include S(border-radius, $globalBorderRadius); @include BoxShadow3D(#eee); position: absolute; @include S(bottom, 25px); diff --git a/src/css/common.scss b/src/css/common.scss index e48658aa..55af39dd 100644 --- a/src/css/common.scss +++ b/src/css/common.scss @@ -169,20 +169,26 @@ button { box-sizing: content-box; @include S(padding, 3px, 10px); @include IncreasedClickArea(10px); - @include BorderRadius(4px); @include TextShadow3D(#fff, $borderColor: #28292a); @include ButtonText; - @include Button3D($accentColorBright); - border: #{D(1px)} solid rgba(0, 10, 20, 0.2); + border: 0; + background: $colorBlueBright; + color: #fff; + + // border: #{D(1px)} solid rgba(0, 10, 20, 0.2); @include S(border-bottom-width, 2px); - color: $accentColorDark; + // color: $accentColorDark; letter-spacing: 0.05em !important; - box-shadow: 0 #{D(1px)} #{D(2px)} 0 rgba(0, 10, 20, 0.2); + // box-shadow: 0 #{D(1px)} #{D(2px)} 0 rgba(0, 10, 20, 0.2); .keybinding { @include S(bottom, -2.5px); @include S(right, -2px); } + transition: opacity 0.12s ease-in-out; + &:hover { + opacity: 0.9; + } } ::selection { @@ -210,7 +216,7 @@ input[type="email"] { @include Text; @include IncreasedClickArea(15px); - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); &::placeholder { color: #fff; @@ -307,7 +313,7 @@ canvas { } ::-webkit-scrollbar-thumb { - border-radius: 4px; + // border-radius: 4px; background: #cdd0d4; } @@ -407,7 +413,7 @@ canvas { content: "Coming soon!"; z-index: 10000; background: rgba(lighten($mainBgColor, 0), 0.4); - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); position: absolute; display: flex; justify-content: center; @@ -480,7 +486,7 @@ canvas { bottom: 0; z-index: 1; @include BoxShadow3D($themeColor, $size: 1px); - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); transform-origin: 0% 50%; @@ -568,7 +574,7 @@ canvas { text-transform: uppercase; @include S(padding, 1.5px, 3px, 2px); @include PlainText; - @include BorderRadius(2px); + @include S(border-radius, $globalBorderRadius); &, > span { @include S(font-size, 9px); diff --git a/src/css/ingame_hud/building_placer.scss b/src/css/ingame_hud/building_placer.scss index ab7c8da9..55b2af34 100644 --- a/src/css/ingame_hud/building_placer.scss +++ b/src/css/ingame_hud/building_placer.scss @@ -6,7 +6,7 @@ display: grid; @include S(padding, 6px); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(width, 240px); @include S(grid-column-gap, 5px); @@ -14,6 +14,10 @@ grid-template-columns: 1fr auto; grid-template-rows: auto 1fr; + @include DarkThemeOverride { + background-color: #55585a; + } + .buildingLabel { @include PlainText; @include S(margin-bottom, 2px); @@ -54,7 +58,7 @@ @include S(width, 100px); @include S(height, 100px); background: top left / 100% 100% no-repeat; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); } @include StyleBelowWidth(700px) { @@ -77,10 +81,14 @@ .keybinding { position: relative; } + + @include DarkThemeOverride { + color: rgba(#fff, 0.5); + } } .variant { - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); background: rgba(0, 10, 20, 0.1); display: flex; position: relative; diff --git a/src/css/ingame_hud/buildings_toolbar.scss b/src/css/ingame_hud/buildings_toolbar.scss index e3ba48e0..d9f91fcc 100644 --- a/src/css/ingame_hud/buildings_toolbar.scss +++ b/src/css/ingame_hud/buildings_toolbar.scss @@ -56,10 +56,10 @@ } } - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); &.selected { - background-color: rgba(74, 163, 223, 0.3) !important; + background-color: rgba($colorBlueBright, 0.3) !important; transform: scale(1.05); .keybinding { color: #111; diff --git a/src/css/ingame_hud/dialogs.scss b/src/css/ingame_hud/dialogs.scss index e2a79ed9..45015115 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -21,6 +21,19 @@ } } + @include DarkThemeOverride { + background: rgba(#33363d, 0.9); + @include InlineAnimation(0.12s ease-in-out) { + 0% { + background-color: transparent; + opacity: 0.5; + } + 100% { + background-color: rgba(#33363d, 0.9); + } + } + } + &.visible { .dialogInner { opacity: 1; @@ -43,12 +56,16 @@ @include S(min-width, 300px); max-width: calc(100vw - #{D(40px)}); max-height: calc(100vh - #{D(40px)}); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); display: flex; flex-direction: column; @include S(padding, 12px); pointer-events: all; + @include DarkThemeOverride { + background: #333438; + } + &.optionChooserDialog { .optionParent { display: grid; @@ -59,6 +76,16 @@ cursor: pointer; @include S(padding, 10px); background: #eee; + transition: background-color 0.12s ease-in-out; + + &:hover { + background-color: #e7e7e7; + } + + &.active { + background-color: $colorBlueBright; + color: #fff; + } } } } @@ -72,6 +99,7 @@ grid-template-columns: 1fr auto; @include S(margin-bottom, 10px); + @include DarkThemeInvert(); > .closeButton { opacity: 0.7; @include S(width, 20px); @@ -87,6 +115,7 @@ } > .content { + @include PlainText; overflow-y: auto; pointer-events: all; } @@ -101,6 +130,11 @@ @include S(min-width, 60px); @include S(padding, 5px, 15px); + transition: opacity 0.12s ease-in-out; + &:hover { + opacity: 0.9; + } + &.good { background-color: $colorGreenBright; color: #fff; diff --git a/src/css/ingame_hud/game_menu.scss b/src/css/ingame_hud/game_menu.scss index e32adfce..87b6cbef 100644 --- a/src/css/ingame_hud/game_menu.scss +++ b/src/css/ingame_hud/game_menu.scss @@ -27,6 +27,8 @@ position: relative; @include IncreasedClickArea(0px); + @include DarkThemeInvert; + &:hover { opacity: 0.8; } @@ -79,7 +81,6 @@ border-color: rgba(0, 0, 0, 0.1); @include S(padding, 5px, 5px, 5px); - border-radius: 0 0 #{D(4px)} #{D(4px)}; @include S(padding-left, 30px); @include S(margin-right, 3px); @include IncreasedClickArea(0px); @@ -144,7 +145,7 @@ @include S(min-width, 5px); @include S(height, 10px); @include S(padding, 1px, 3px, 2px); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); border: #{D(1px)} solid #fff; @include InlineAnimation(1s ease-in-out infinite) { 50% { diff --git a/src/css/ingame_hud/mass_selector.scss b/src/css/ingame_hud/mass_selector.scss index 99027735..3c41893c 100644 --- a/src/css/ingame_hud/mass_selector.scss +++ b/src/css/ingame_hud/mass_selector.scss @@ -4,7 +4,7 @@ left: 50%; transform: translateX(-50%); background: rgba(lighten(#f77, 5), 0.95); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 6px, 10px); @include SuperSmallText; color: #fff; diff --git a/src/css/ingame_hud/notifications.scss b/src/css/ingame_hud/notifications.scss index cc957e5c..4b8ee767 100644 --- a/src/css/ingame_hud/notifications.scss +++ b/src/css/ingame_hud/notifications.scss @@ -5,13 +5,17 @@ .notification { background: rgba(#333438, 0.8); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(margin-top, 3px); color: #fff; @include SuperSmallText; @include S(padding, 7px, 10px); @include S(width, 150px); + @include DarkThemeOverride { + background-color: rgba(#55595d, 0.8); + } + &[data-icon] { @include S(background-position-x, 8px); background-position-y: center; diff --git a/src/css/ingame_hud/pinned_shapes.scss b/src/css/ingame_hud/pinned_shapes.scss index 4947db29..2e4c8390 100644 --- a/src/css/ingame_hud/pinned_shapes.scss +++ b/src/css/ingame_hud/pinned_shapes.scss @@ -41,6 +41,10 @@ flex-direction: row; grid-column: 2 / 3; @include S(height, 9px); + + @include DarkThemeOverride { + color: #eee; + } } > .goalLabel { @@ -68,6 +72,8 @@ @include S(top, -4px); @include S(left, -4px); background: uiResource("icons/current_goal_marker.png") center center / contain no-repeat; + + @include DarkThemeInvert; } } } diff --git a/src/css/ingame_hud/settings_menu.scss b/src/css/ingame_hud/settings_menu.scss index ade1fda1..70b9897a 100644 --- a/src/css/ingame_hud/settings_menu.scss +++ b/src/css/ingame_hud/settings_menu.scss @@ -27,6 +27,6 @@ @include S(grid-gap, 10px); background: rgba(0, 10, 20, 0.1); @include S(padding, 20px); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); } } diff --git a/src/css/ingame_hud/shop.scss b/src/css/ingame_hud/shop.scss index cba6eb33..41834d06 100644 --- a/src/css/ingame_hud/shop.scss +++ b/src/css/ingame_hud/shop.scss @@ -9,7 +9,7 @@ display: grid; grid-template-columns: auto 1fr auto; background: #eee; - @include S(border-radius, 3px); + @include S(border-radius, $globalBorderRadius); @include S(margin-bottom, 4px); @include S(padding, 5px, 10px); @include S(grid-row-gap, 1px); @@ -20,6 +20,10 @@ margin-bottom: 0; } + @include DarkThemeOverride { + background: #55585a; + } + .title { grid-column: 1 / 3; grid-row: 1 / 2; @@ -32,7 +36,7 @@ .tier { @include S(margin-right, 9px); background: $colorGreenBright; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); text-transform: uppercase; @include PlainText; color: #fff; @@ -160,19 +164,23 @@ background: #e2e4e6; @include S(line-height, 13px); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 1px, 2px, 2px); position: relative; text-align: center; @include S(min-width, 50px); overflow: hidden; + @include DarkThemeOverride { + background: #333438; + } + .progressBar { bottom: 0; left: 0; right: 0; top: 0; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); position: absolute; display: inline-block; z-index: -1; diff --git a/src/css/ingame_hud/statistics.scss b/src/css/ingame_hud/statistics.scss index f646badd..fe56f393 100644 --- a/src/css/ingame_hud/statistics.scss +++ b/src/css/ingame_hud/statistics.scss @@ -80,10 +80,14 @@ > div { background: #f4f4f4; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(margin-bottom, 4px); display: grid; + @include DarkThemeOverride { + background: #222428; + } + grid-template-columns: 1fr auto; @include S(padding, 5px); &:last-child { @@ -100,7 +104,7 @@ .counter { @include SuperSmallText; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 0, 3px); } } diff --git a/src/css/ingame_hud/unlock_notification.scss b/src/css/ingame_hud/unlock_notification.scss index 15ffe0e0..597b45f9 100644 --- a/src/css/ingame_hud/unlock_notification.scss +++ b/src/css/ingame_hud/unlock_notification.scss @@ -17,7 +17,7 @@ .dialog { background: rgba(#222428, 0.5); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 30px); @include InlineAnimation(0.5s ease-in-out) { @@ -54,7 +54,7 @@ @include S(padding, 1px, 6px); @include S(margin, 20px, 0, 20px); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); @include InlineAnimation(0.5s ease-in-out) { 0% { transform: translateY(-60vh); @@ -111,7 +111,7 @@ background-position: center center; background-size: cover; background-repeat: no-repeat; - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); box-shadow: #{D(2px)} #{D(3px)} 0 0 rgba(0, 0, 0, 0.15); } } diff --git a/src/css/ingame_hud/vignette_overlay.scss b/src/css/ingame_hud/vignette_overlay.scss index c973b16e..ce569fd4 100644 --- a/src/css/ingame_hud/vignette_overlay.scss +++ b/src/css/ingame_hud/vignette_overlay.scss @@ -6,4 +6,9 @@ bottom: 0; background: uiResource("vignette.lossless.png") center center / cover no-repeat; pointer-events: none; + + @include DarkThemeOverride { + // Too many artifacts + display: none; + } } diff --git a/src/css/main.scss b/src/css/main.scss index 166eb6f7..a17833c8 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -62,9 +62,9 @@ ingame_HUD_MassSelector, ingame_HUD_BetaOverlay, // Dialogs +ingame_HUD_UnlockNotification, ingame_HUD_Shop, ingame_HUD_Statistics, -ingame_HUD_UnlockNotification, ingame_HUD_SettingsMenu; $zindex: 100; diff --git a/src/css/mixins.scss b/src/css/mixins.scss index 311c176d..dc5eeb86 100644 --- a/src/css/mixins.scss +++ b/src/css/mixins.scss @@ -348,3 +348,16 @@ button, @content; } } + +@mixin DarkThemeOverride { + @at-root body[data-theme="dark"] &, + &[data-theme="dark"] { + @content; + } +} + +@mixin DarkThemeInvert { + @include DarkThemeOverride { + filter: invert(1); + } +} diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index af6878e7..b77fdc07 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -4,9 +4,26 @@ justify-content: center; flex-direction: column; - background: rgb(140, 165, 194) center center / cover !important; + // background: #aaacb4 center center / cover !important; + background: #bbc2cf center center / cover !important; + + .settingsButton { + position: absolute; + @include S(bottom, 30px); + @include S(right, 30px); + @include S(width, 35px); + @include S(height, 35px); + pointer-events: all; + cursor: pointer; + background: uiResource("icons/settings.png") center center / contain no-repeat; + transition: opacity 0.12s ease-in-out; + &:hover { + opacity: 0.9; + } + } .fullscreenBackgroundVideo { + // display: none !important; z-index: -1; position: fixed; right: 50%; @@ -45,7 +62,7 @@ .standaloneBanner { background: rgb(255, 225, 238); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); height: 100%; box-sizing: border-box; @include S(padding, 15px); @@ -125,7 +142,7 @@ @include PlainText; background: $colorRedBright; @include S(padding, 10px); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); color: #fff; @include S(margin-top, 10px); border: #{D(2px)} solid rgba(0, 10, 20, 0.1); @@ -138,7 +155,7 @@ flex-direction: column; background: #fafafa; @include S(padding, 20px); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); // border: #{D(2px)} solid rgba(0, 10, 20, 0.1); height: 100%; width: 100%; @@ -149,7 +166,7 @@ background-color: $colorRedBright; @include PlainText; color: #fff; - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 5px); } @@ -158,9 +175,10 @@ @include S(width, 130px); @include S(padding, 15px, 20px); letter-spacing: 0.3em !important; + + font-weight: bold; color: #fff; background-color: $colorGreenBright; - text-shadow: #{D(1px)} #{D(2px)} 0 rgba(0, 0, 0, 0.1); transition: transform 0.12s ease-in-out; &:hover { transform: scale(1.02); @@ -184,7 +202,7 @@ .savegame { background: #eee; - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 5px); display: grid; grid-template-columns: 1fr auto auto; @@ -259,7 +277,7 @@ background: #fafafa; @include S(padding, 5px); @include S(padding-left, 10px); - @include S(border-radius, 4px); + @include S(border-radius, $globalBorderRadius); @include S(margin-left, 10px); @include SuperSmallText(); diff --git a/src/css/states/preload.scss b/src/css/states/preload.scss index d7cb412f..4a16d387 100644 --- a/src/css/states/preload.scss +++ b/src/css/states/preload.scss @@ -32,7 +32,7 @@ @include BoxShadow3D(#fff); @include S(padding, 15px); - @include BorderRadius(4px); + @include S(border-radius, $globalBorderRadius); @include DropShadow; .errorHeader { diff --git a/src/css/states/settings.scss b/src/css/states/settings.scss index f4b6e6b4..0c9ca862 100644 --- a/src/css/states/settings.scss +++ b/src/css/states/settings.scss @@ -8,10 +8,23 @@ @include Heading; } + .versionbar { + @include S(margin-top, 20px); + @include SuperSmallText; + display: grid; + align-items: center; + grid-template-columns: 1fr auto; + .buildVersion { + display: flex; + flex-direction: column; + color: #aaadaf; + } + } + .setting { @include S(padding, 10px); background: #eee; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(margin-bottom, 5px); label { @@ -31,6 +44,15 @@ grid-template-columns: 1fr auto; } + &.disabled { + opacity: 0.3; + pointer-events: none; + * { + pointer-events: none !important; + cursor: default !important; + } + } + .value.enum { background: #fff; @include PlainText; @@ -40,7 +62,7 @@ cursor: pointer; justify-content: center; @include S(min-width, 100px); - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 4px); @include S(padding-right, 15px); diff --git a/src/css/textual_game_state.scss b/src/css/textual_game_state.scss index ffb2a757..d8c980cd 100644 --- a/src/css/textual_game_state.scss +++ b/src/css/textual_game_state.scss @@ -33,7 +33,7 @@ .content { background: #fff; - @include S(border-radius, 2px); + @include S(border-radius, $globalBorderRadius); @include S(padding, 10px); max-height: calc(80vh - #{D(60px)}); overflow-y: auto; diff --git a/src/css/variables.scss b/src/css/variables.scss index 99dc3ea1..03213900 100644 --- a/src/css/variables.scss +++ b/src/css/variables.scss @@ -31,6 +31,7 @@ $mainBgColor: #dee1ea; $accentColorBright: #e1e4ed; $accentColorDark: #7d808a; $colorGreenBright: #66bb6a; +$colorBlueBright: rgb(74, 163, 223); $colorRedBright: #ef5072; $themeColor: #393747; $ingameHudBg: rgba($accentColorBright, 0.1); @@ -39,7 +40,7 @@ $ingameHudBorder: #{D(1.5px)} solid $accentColorDark; $text3dColor: #f4ffff; // Dialog properties -$modalDialogBg: rgba(#666a73, 0.8); +$modalDialogBg: rgba(160, 165, 180, 0.8); $dialogBgColor: lighten($mainBgColor, 10); $lightFontWeight: normal; diff --git a/src/js/core/config.js b/src/js/core/config.js index e7e6c47c..10495e4f 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -76,8 +76,8 @@ export const globalConfig = { debug: { /* dev:start */ - fastGameEnter: true, - noArtificialDelays: true, + // fastGameEnter: true, + // noArtificialDelays: true, // disableSavegameWrite: true, showEntityBounds: false, showAcceptorEjectors: false, diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js index b2c706b7..8dbfee2f 100644 --- a/src/js/game/hud/parts/settings_menu.js +++ b/src/js/game/hud/parts/settings_menu.js @@ -88,8 +88,11 @@ export class HUDSettingsMenu extends BaseHUDPart { // this.background.classList.add("visible"); this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); - const totalSecondsPlayed = Math.ceil(this.root.time.now()); - this.timePlayed.querySelector(".playtime").innerText = formatSeconds(totalSecondsPlayed); + const totalMinutesPlayed = Math.ceil(this.root.time.now() / 60); + this.timePlayed.querySelector(".playtime").innerText = T.global.time.xMinutes.replace( + "", + "" + totalMinutesPlayed + ); } close() { diff --git a/src/js/game/hud/parts/statistics.js b/src/js/game/hud/parts/statistics.js index 010d923f..f8cdd0a8 100644 --- a/src/js/game/hud/parts/statistics.js +++ b/src/js/game/hud/parts/statistics.js @@ -56,7 +56,7 @@ export class HUDStatistics extends BaseHUDPart { this.dataSource = source; this.dialogInner.setAttribute("data-datasource", source); - this.sourceExplanation.innerText = T.ingame.statistics.dataSources[source].title; + this.sourceExplanation.innerText = T.ingame.statistics.dataSources[source].description; if (this.visible) { this.rerenderFull(); } diff --git a/src/js/game/map_chunk_view.js b/src/js/game/map_chunk_view.js index 7634db64..411bfba8 100644 --- a/src/js/game/map_chunk_view.js +++ b/src/js/game/map_chunk_view.js @@ -7,6 +7,7 @@ import { Math_max, Math_round } from "../core/builtins"; import { Rectangle } from "../core/rectangle"; import { createLogger } from "../core/logging"; import { smoothenDpi } from "../core/dpi_manager"; +import { THEME } from "./theme"; const logger = createLogger("chunk"); const chunkSizePixels = globalConfig.mapChunkSize * globalConfig.tileSize; @@ -119,9 +120,9 @@ export class MapChunkView extends MapChunk { context.scale(bgDpi, bgDpi); } else { if (this.containedEntities.length > 0) { - context.fillStyle = "#c5ccd6"; + context.fillStyle = THEME.map.chunkOverview.filled; } else { - context.fillStyle = "#a6afbb"; + context.fillStyle = THEME.map.chunkOverview.empty; } context.fillRect(0, 0, 10000, 10000); } diff --git a/src/js/game/theme.js b/src/js/game/theme.js index 198f9797..251f4433 100644 --- a/src/js/game/theme.js +++ b/src/js/game/theme.js @@ -3,5 +3,8 @@ export const THEMES = { light: require("./themes/light.json"), }; -// TODO: Make themes customizable -export const THEME = THEMES.light; +export let THEME = THEMES.light; + +export function applyGameTheme(id) { + THEME = THEMES[id]; +} diff --git a/src/js/game/themes/dark.json b/src/js/game/themes/dark.json index 6d0c1b22..caf28bfb 100644 --- a/src/js/game/themes/dark.json +++ b/src/js/game/themes/dark.json @@ -10,6 +10,10 @@ "red": "#4a3d3f", "green": "#3e4a3d", "blue": "#35384a" + }, + "chunkOverview": { + "empty": "#444856", + "filled": "#646b7d" } }, diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json index c3431928..d0a1e9bb 100644 --- a/src/js/game/themes/light.json +++ b/src/js/game/themes/light.json @@ -10,6 +10,11 @@ "red": "#ffbfc1", "green": "#cbffc4", "blue": "#bfdaff" + }, + + "chunkOverview": { + "empty": "#a6afbb", + "filled": "c5ccd6" } }, diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index b86ba45d..b45d35b8 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -6,7 +6,7 @@ import { ReadWriteProxy } from "../core/read_write_proxy"; import { BoolSetting, EnumSetting, BaseSetting } from "./setting_types"; import { createLogger } from "../core/logging"; import { ExplainedResult } from "../core/explained_result"; -import { THEMES } from "../game/theme"; +import { THEMES, THEME, applyGameTheme } from "../game/theme"; const logger = createLogger("application_settings"); @@ -68,26 +68,14 @@ export const allApplicationSettings = [ }, G_IS_STANDALONE ), - new EnumSetting("theme", { - options: Object.keys(THEMES), - valueGetter: theme => theme, - textGetter: theme => theme.substr(0, 1).toUpperCase() + theme.substr(1), - category: categoryApp, - restartRequired: false, - changeCb: - /** - * @param {Application} app - */ - (app, id) => document.body.setAttribute("data-theme", id), - }), + new BoolSetting( "soundsMuted", categoryApp, /** * @param {Application} app */ - (app, value) => app.sound.setSoundsMuted(value), - false + (app, value) => app.sound.setSoundsMuted(value) ), new BoolSetting( "musicMuted", @@ -95,11 +83,25 @@ export const allApplicationSettings = [ /** * @param {Application} app */ - (app, value) => app.sound.setMusicMuted(value), - false + (app, value) => app.sound.setMusicMuted(value) ), // GAME + new EnumSetting("theme", { + options: Object.keys(THEMES), + valueGetter: theme => theme, + textGetter: theme => theme.substr(0, 1).toUpperCase() + theme.substr(1), + category: categoryGame, + restartRequired: false, + changeCb: + /** + * @param {Application} app + */ + (app, id) => { + applyGameTheme(id); + document.body.setAttribute("data-theme", id); + }, + }), ]; export function getApplicationSettingById(id) { diff --git a/src/js/states/ingame.js b/src/js/states/ingame.js index 5e0c8d62..6307a22c 100644 --- a/src/js/states/ingame.js +++ b/src/js/states/ingame.js @@ -148,7 +148,10 @@ export class InGameState extends GameState { * Goes back to the settings state */ goToSettings() { - this.saveThenGoToState("SettingsState"); + this.saveThenGoToState("SettingsState", { + backToStateId: this.key, + backToStatePayload: this.creationPayload, + }); } /** diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index f701fa85..8335e350 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -32,6 +32,8 @@ export class MainMenuState extends GameState { return ` + + @@ -191,6 +193,7 @@ export class MainMenuState extends GameState { }); } + this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked); this.renderSavegames(); } @@ -281,6 +284,10 @@ export class MainMenuState extends GameState { }); } + onSettingsButtonClicked() { + this.moveToState("SettingsState"); + } + onPlayButtonClicked() { const savegame = this.app.savegameMgr.createNewSavegame(); @@ -288,7 +295,7 @@ export class MainMenuState extends GameState { if (G_IS_DEV) { // TODO - this.moveToState("SettingsState"); + // this.moveToState("SettingsState"); } this.moveToState("InGameState", { diff --git a/src/js/states/settings.js b/src/js/states/settings.js index 48a60273..35d7687c 100644 --- a/src/js/states/settings.js +++ b/src/js/states/settings.js @@ -19,12 +19,12 @@ export class SettingsState extends TextualGameState { ${ this.app.platformWrapper.getSupportsKeyboard() ? ` - + ` : "" } - + @@ -33,7 +33,7 @@ export class SettingsState extends TextualGameState { ${this.getSettingsHtml()}
${T.global.loading} ...
- +
diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 9eb66b86..4543de87 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -45,6 +45,8 @@ global: minutesAndSecondsShort: m s hoursAndMinutesShort: h s + xMinutes: minutes + keys: tab: TAB control: CTRL @@ -290,11 +292,6 @@ settings: description: >- It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. - theme: - title: Interface theme - description: >- - Choose the interface theme which also affects the game. Notice that everything except the default theme may lead to graphical issues. - soundsMuted: title: Mute Sounds description: >- @@ -304,3 +301,8 @@ settings: title: Mute Music description: >- If enabled, mutes all music. + + theme: + title: Game theme + description: >- + Choose the game theme which mainly affects the map background. Notice that everything except the light theme may lead to graphical issues.