From ceef31d1d6951f413bde90d12c9761423e04be73 Mon Sep 17 00:00:00 2001 From: FlayaN Date: Mon, 7 Oct 2024 22:50:10 +0200 Subject: [PATCH] feat(UI): create new theme --- .../Atkinson-Hyperlegible-Regular-102.ttf | Bin 42596 -> 0 bytes .../CommunityShaders/Fonts/Jost-Regular.ttf | Bin 0 -> 58796 bytes src/Menu.cpp | 210 ++++++++++++------ 3 files changed, 146 insertions(+), 64 deletions(-) delete mode 100644 package/Interface/CommunityShaders/Fonts/Atkinson-Hyperlegible-Regular-102.ttf create mode 100644 package/Interface/CommunityShaders/Fonts/Jost-Regular.ttf diff --git a/package/Interface/CommunityShaders/Fonts/Atkinson-Hyperlegible-Regular-102.ttf b/package/Interface/CommunityShaders/Fonts/Atkinson-Hyperlegible-Regular-102.ttf deleted file mode 100644 index c4fa6fbe19063e315ba204adf1db3cf10ee0d0b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42596 zcmb@v31HjBl|Mf7m2LTyE$g%-%U|iM+md|9vV6yud?c|G+liCdNeFgq=YU+~;4ZY3 zc3BFv4JBMD+qC8Z@!Xj=V00X{|;Y$ z=R4mwGw;25^WK{`GhY~Ij8)^OfXV&qR}J9_51-qLd+|{Jz#yyS^^9Hr3Z9KaW25VT zYB_W_p5JE7`kSHk8LX;OP2>=B5`9Zewi6rGTHF-8*yO+rRnU^LT!a zG0oB0ix11@Tgt9u>@pAD@7Zx+=U&~ef2d~cf<27s%685iI>5Bdj{1Lw_vJhHT(;x$ z_W1&!6lQGe4ZG%N=FD5ahx(_F<9+KcWN3#9H=+IsJbQNSJ$&gi`tEwO;vJ|AJM^r-{;4;?;lF#RH9 z*G@84^!@_}=MVfb`RR`{cIl;n|7TXnnt{vDrAL{D6|oXl&MFx*xb!aWG8i-ljYeOn z(KPda$!y>s&fNIO;}1OW%>DfGM;?(LJ=HJWoq3wqWPX_W0dL^pQ=fP6mdtlhtA=$g z{7D*-?nZ59R>w*ovYD%O#geAE-q6w-Yc`vVMT*-Oj~UIe<^(S)G9`Fxyv3)uwOt>) z=9&-EwPj*zAe4EttR%^``VEtPAwGKdi4%9+~8>Q2q^H%TJg;GYIK)}f4^ zp-e2^qY+r>B(1*{cseDM5owpn<(~S`baP*qHR5#?O;lep6 z6(oj5S~EtCDi-Rv$x)EVOOXz6PAS%vYO~cjnv-5%ve{8*YfJf3o8v8;Q@$+|D_3sV zuyW7Z9kbhGs~bC0sm{*9!Oo}k zwE>IS@6hWVezPS|t0&&018magnUlr9d%sh^$a}(CtJ7$e)a@f$xjbq2lW8 z+tl2=sn1(o=xH7F?XuRGnv6A$rcHgm*W~t))f#G-<+h;J8f=sKBTbuneJBu%M#=}L z54O3Lx>fEXA8NS68fuf}1i>c&AF`5Ml;UTX^l@n4Qs7ovEHTIhj~NudORFSe8eX{j zt+`m{`?0zE-?&2h_^H{WM_=Mw&@IqkBPct7J~Tk88qhB;*=VR@q`zE3E9ASwr8k&j zIjR)>lJp3#XdP{~dfd%Tj>Nh|=A~`la)fGiy4q0fQ;*nuH5C>3c|K%8{E-aBk%7A{{m;>UsWL0Vjj0NrVO)mY&Hok4!w#=u{?=N!)Oj83e=gwV_<+sV7iI665EykOd

Ln0t( zd{+7cXtc5>wBfaiG0U?m%c5N><9etIf5OtL`XWRr84rFTk!rPE(R;*yK`)U@rJunkJkF|N?TR08 zRF?^ToO7}aiUz)#KBigJDJCux3v|Ji9p5|j^xU>*FMf|#WrO!U((%gBaF@HgSt-uE z03YRj1c4vFNy*kj>=${yhh6X01%3ybM)kfn))ZP-bIvRW2;f?+E;Z@t3g5v`%6`St0 z2Wl!RYa>pJ+ior`w$u+MLaC^=vaUg{Q9Knkzs=#XR%uIY;i1;(swSJk-xaV?-*I8D zJm8NuKW=Eq<6o&{dw$#VP-~|ikcL&*5zt0D#SB=T7-M?!rCY^N&q}gB_Rpi!)1%vJ z`*y5awWHU$4J`qD-J{pX9m^5{i;lK21l&zVOvcatT^@n{vw7NcxYzHJS-RJ!w# zhj+eCG=7DrGCMP;xCT7M97~Kj(i6oRk^$8jgFXuL>oXtVzs_9BZ$0(basJl$c%}%N z34Ss3=ua_4kYV|Y9|*clCFD1>lDnw7>1Kl7zr(LpG=8PW8z1o)~-l<@wjnk zYUg>J^AhbEqh&0q^fcHTH(fdM$5^B`QEzMC+Nbd575zbvwSC3(?!zmllzv~x;ElV( zU4Bc+7nJ%+r88VtRB2U6KqNMZKCc4pCU^kF57n!x}@W8`5Tnvba(f3QfUYbqqjaWGc`3s7kEc}_;>K(UHcp6 z)UT0Hw!+|`pnT$&1%#_;Sk_0*(EI{o#;MbCG<;28~6vlF=%91q;S{Ju;Ztk=fWUi6w zA}y9syMEk0H`uYINA~tj#%?ltTU?HofL+5qz+mlsykUj6%4V^K6M?~PiO%y=o@Z?_ zzqQI0$23fxGdQKk#dtPo$!5l5LP23JhFOXUH_`-^6Q#8+q1G1Juyg0c1ph*6wXa3i z4cUCdsmyx*1&E2Dr(_xylul@^PFJPDskPMVwU*(o;0TGaQ|A+#b+u+3w$dA&B9r|I^I0qI7YM}7WyriwT# zEj+n!K6@PX7%?Y+{W4dTLQb@Cb93IuBE{?TFAH&W=*(rZ-&{PQ4-CXA?3Gtj161)p zt>RjIkgOXLAsOaNY|0im>|E;93v6J+-q>6N-=mn5nJh%Qr)T7e74o4_C~*2PE!bZ z38I|7fMhQQuYe}cS7aB2Ip57~q{li};*%y6|_C=qQjy9aN;n=n2(>lFJG;v1tuP+(X%Y3~=el~qBU(Xln z-%ww_p+A(nZ?=Wvc6&Tz%iZ5dZC~MZuGpT+-5UoYW~j8r#=(fm6d7z($Kc??`BD{V z%IRu@&}AxL)u<9l3I_FZUEOV2qQXe4<#jcGeXYO2ot*Abb@i*#M>8XNT}?J?y>uAu zxrNR0yG45{z3RA!c}keF<2*OsmqkH*?#?x#u2GD3m(Qjc>&-Qd9w^kV(3(#7Z^>Hp zty$CeM$dH8jiG(&O?!RC+M;5etF3;As#d?8$0paOqrit`v3yacOyp*Q>cMWiZE{6y zpuQSnvNe*}WRHzB{|AW!Mf`~aMKwym zWDdEE4TIx@4X*frr*oHOw4zTjcpQ3>=Wbu=mwVg7<>NP*Wn)RH(XMy94Z7MyldDCk zZfdD@)|OP&R5=}bo!k*u56LhF*TnR+ zRA#J>tf0XLHU0W~-jmAw+yDhAh8%B7iTe6M=MVWGM13Ouh`A3{rFwCB_d?%4p*08H zUCD_RCez9uj5Iy}L*{3-Eq=?oF|N;4uJklIVnZR`4c<}3kARPPKTc0mDvh$`n)huv zv5CK)xr$$t$G*-N8eK(A z*@12Sscq7V`O=b-()n)UYg}qaxf7zC>UR>QG@g8Zf9&Q||27n@&{0w8M0dAZGFxs7 z%2k72F&E|_mLj_`5e81g_?AMuzsYWI^4kjsNdmy9d7}H)6zK5(YmPOT5bB zudS-8^;;}Kr(W+2T3VfEvy(1OiQXA7n*)@s-uIfEP7_@MzlHUTX8+W$<;2%m3{idI zq(SXatRL~r53GrK9HtUOsk=7PRPQw)vSrj1ww5=`b+HmvrsDil>_ON)(i^417PKV5 zXo`J`TH=L0i3UrZ&t~`W7t1R?d3k}yYWMo!AcIFR(+^_4M`cTv@<@wtA7ZI-Dy5c} zcG`VDTY1H&t|(9tD@56a%h`kM$YNQb%7 zONnSnJO?zQ7AGNeSDv84WfaxqX)CWF-cUPVKs!VqwPVzkNTQu(c=~B=C5tmCc+O|H zdkeeUz_QsK?LONw>ihD1u)`A-?JQi*rvxvSv~wCi-c>tGIkl`A%+0~{KWF`$V$oNz zxT;LyWe*YCY|EHlkNf&R(ClYHsPKTg0uhSE?Akru{^Mc^?iMnCtCes&Cn zKRbHwy+jlGmre5b@z03Zn2zkx8NNW=7U^~?T@jlt(xte&Beu-a2YN|y;W*}C?+0(n zSq;`tN*}7V>dOl$F6_-OYJu%Sa-oxI<482ts@7X@Nw!gcpHC$`d6=+HL)X+wLpckG#>Mf^3 z#DwL+3^qHzF}Y69;HPI85D)ZWoxzt|Ht=D+LAq<{6TSWE=^(4Ij*wq@Fk>Adv;T}7 ztKPY|I$_4T!fO8PWG2l2=u0-$);1-5-W1(a-kYg*FB-;OEOajknE`m){`xCg{bAGNSBp{`z=k2Jxq7UZOS%#CZC3 zR;If!6R7Ad?d%8!YK#Ct1-fwDg47LuiDny zy6vi!xqIi%HIc}got?S+KO6}5Myy2!ckP~yJ3=EP@p@mQuTi?Y_57<=4yk2_R$g^} z>#2W?tl8Dkxod4CvUXQz$F4Pzi}-<(ny9C|wzj7DmJfZ1$M!jFZZpv>O>v4(<@=dd zK;zt)c~v@|f({Sx+jyIxSDiziD+UdBJ!g{xCNBxJ*Oa@jsCU+dLUqo1NnV;wubuVk zyKMh4NhkcXO7vevd5N$~d7Y`m3xQhviP0yX7zKiUt{c7i=Fy`^zdAZfeFIwf&3u)n z8k!F43Bp&(t&iv8V6-erOA^slF?*fO;w|Vc>u-qc*w-xUxcGuN~Y7}32 zsoQ1sSrb*=6@zh0)MIv%^Am{Gwx%lhuc|FBxz=VYYb~`}95wOkK&0FX%^NN+Z?3Ja zcj#gw?h=MU>v zd|GW$X=$~#qPWOx(My81!G&%7S@`re)F;-outv7bsVDc3CVqnx#g?EfocdCW)9;X* z3=^M{Zq7VoZ%~X`zrMQ8T;Zq@YwbSx%`ZW&Xl@bH)bzu$1H5 z#^u(4h5y1o5ObzZ6-jTMD&qg9bvKa(Q^)2*>_OhP=u75oyXs-7R>|gjGiRWv%&LW9 zEZUvamo`Qdqdo)Feq>tFG3pGb*agv8OdB!kcxvZ2@e%0ETukO&jHh;sPx#vwi}1UBmH~gQ)9-iI`X!ey;i<0nBz)dBy0>{F zjg1kyL|bGF7WH9qP9H+m6ZJ~MA18%>%RhaLj6+@>l2;5p2j`&>{a1q3R4dj~q33F> z#_IC2VhMTJ~B{ z8(Uxfb^FGR?MIKIDe_Ukn7^Q{8m2Hmd=$5Au8_z_;UZj`jbZ1;F5-VY-@F%ANxFxI za$#@TfEdb;XMRV+`_v6t_E(e5;$|AwhEQXyv3*ZhN2|A|wb8;iWYKCOfioye{b)=0e)q* zRTfGi4y9nXIcll{(efIf-BDj&meUHEYtQ7V@INIET}t!nBJx)gaj&Vc&=lZ5#-@$~ z|1tOy1ks zO8Ee)x94hy{Xop%N8o9IB~W*B$Ry%QJqS~0tsvGP;0Z%HK#K`2Dz@R|f}L71!~?~? zj@9-4;ZBc9iC9g}>f(($s6-G2f+2iYX>TszpAi>a&T+_!Wg z5`jiBQ(WSFs$r0Pz>0L8Ml7$WyLkwl-_U;XOphbnW>?xvt=)C@X1~SNI^=bBqg!nr zb4mTG*>QTGTl0CvDzs~2+0TQgDTzd z(b?w__oDeh@dNtu;-zym!F8nDJ3HUg=X#l@+oI;h$ud3jnw1-#}wjZsG--vTiKuav@Is+S0lV6cxku8tRgczx|EX(mkt% zu1|0Z(bJd`Z6fqUYk=`bMjn~^;0Jkv&u8xBQYHh~(uETkQKa3n{xfW!tCU}wxsIF_ z^1DiBPbAi;g&KK3o<5+GLo~7#;NK!&2PoTjX!$ty%{*Z%J0?A432Uf6`zc&y%A zN&C#Oyp~-I$CTQHbxrJ;^P92@;acbtJmz)@_)QuMt#D!va<%&ck2@8U11r}0n^XI0 zHyZnta^F~A$ltfIp?TAxnoWr#!QCj!L-?=BA&yiD~9xn)ohl;-9mFOhbH-9s(bH zu&uOjFwq?H)oN*f8p(T(14UY_q$CiDqsdWjk*_sD?gk#keh)*|Oo%7T58MHJV=7SB z(_FW<=emk&&89-9{gzACg%7Q4S>IWA-rCmql=48=klEL0_cnFGO0^qpH3j_rzSVwL zi`Q7`N(5I-*gjG>7;N1g`S_-2+!-GVu9>%G{x#(Ps%fyTHtN#znd*)}&@H=70e4Ly zjX&5x{#ACV7&qDRZGgw zdiwCb7k6%d@d(N)&_{1&%Zk`7m;%#CAy{&P6lEmY-8|eD9~fBk$(=9lJM{F>CG4c|z|6s}dEB^hl@8du5^L>>MLeIZL9CC?TU#iXp4}I+Wd^LA1>PVV< z`nV_aGwvD(F2Xj6*cD>$!iQO^-}0s?uhj_uGxR-1hQbY-GH>S;KGl0ZuLX}H(7i6P z?@VlL7Gg-tB3Ql#o3XQo%yxF2M1+}q7Dr`4sk0?iA97XKd#Y6pKzj#jvDU(s4xsCR_r+x;~|y1EwsF_TiGBOGD7*vHX+-Zs!4vXSv|GBxzx z4g6~GJ_h`(*>xLI5JLXd6)DS~7x38OwJ zZCFHT3C@L;R^#n**r6{h)H}m7~jh4uVT=r3O!;kKsL8&@|OTw$xHu5BcuciF4F?L)3=Z>@pfZS0P?8eLWG zO;*|Aa299_EdgJ!xhG(c`kbYfI06SgLw~o`A9lNB_$1A#hMJJuR(y@a@AlfY2CGwF zTkmlh3-#98YT^&p_4r}wk$0FcEL&K}FZA&eiglUm>dex$^h-~1^=7VvCZu(WTwJvu z{y}Ge_PdgQkarHU9?=A9WiOj9vVT`K_c(M4>XevcjdzOY%DXhxn)|G}-MbHKz zudfN~lEzhS8>Y@5=WBC8*xWrAgw5Tbhmx+uDEgcIivCX9gT4~wh=oih|32v>YslQcea$$m7b;&0GaEHg6 zkXv(;towAB?-|^l+AvLRJ0sy1gX}k2S56oL-63q&G;w2o%ET95m0n@DYo=izm(4e# z8o!usRAIVt!H8tC)o80sm73|o;tQqns;VMgbtRTdq1VDF{~XHGy0E&QOmRoCZX|+^ zVU1I973nG~O;trTh&YZ&uW0H#uEKItrJtP?eO?f9CyxAnHKrG(lS#SgGc2jDY1?RI zBq2Ap)W&?K`l0ihEvD-J_4ek$`r+~Zw$YUn{0Yx!f7l%A^u$)0wT}9(VCQ(VNm`>x zrhKs8BdxJWV&%q6Cs0A3LceIf2K`bg_G9U*#2hKc;jHBT#a&t)J}TwE;@{8Q#!EAA z@LidX%rAHG_ag=>4g-Ajqc8H_%-6C!_$7F79_Z~?c>w;_KyCuqPe*$f>nbT;85hLS zOmwMZ0+mL4;uN>Prm{@7O)S}8XQ&IBZMB~r)_7(9#L|s+ZS`#~o!D;;{|@ckBHcs# zOf6Y&O504K7nQx_V2ZJmaBE>3)uyl#U28JirP2~@S&gsJ>}tWILsME@jK>Cxt7X5@ zS!XOQEG-WB_-g|jqg8grRO>XBXiG~1zD)JthK5SJqVh7%X0XrbPWTc{SbRUb^|Qd) zIo-DaWW0Q3qOPqeVz9WEyBGg>R;L5b2#*WL!&Z}bJSLX=A<;IH?VQhRU@Vcqq7O}E zO_;>uC>SQO@t>@Ijr-Tkj?902_?66mZJ67z_o)lV_U;|KaP+dvFqx$Mb zib0LD6+$-RYOD=Gu^;0q8@zkVfdiY3V?w5umnjqhG(C7P1w(6hRoue zB{#VY8bZgQiA(0pwSWFIzcN$z#v72#%zc@YQ;cOD#36J`vxlDMD&LD|$UqyVr7o&qES|CfYW(#=-5Fiqzcww<@EUPe>a5p%W zh4O5Y?g0eFRb2I`8zKsJtNVZc>4Hz~ykhd!*^iE8-jW`F`*Af+yi58%KPKjoy}%KA ze=(3KHmRt4Rm6Bvw~4@UA%EVLHMR7h{b}nuxylo4uzS04ZU8#K(OB=*>wWc&4o_zY zJ6^lJ8yY-vLa`^j-X25^JA?_wQQ|42NEtYgP;1-atB37%Q%(82R7L(F^ zs~gou$1dpZzHlsxX5F{Gs&s{|O4k?;a&##*^cnAQ3G20?8`uY&+t8c33Eux2-P3QI?FjxEDbbVikmdjt<7R4F)qi zoNFSn$vT&^dqs5X>L|a%xi%bG=lGx) zA84~0^pj7CB`df&QH?g{xH(Zx+GeGX20Vt#3(ppPF3DKa<(2_9=}oBgPj-q6Md-=wwu! z|6*O{n}|KW{SE2WQ({e;W1WXde$1z7uV}eCm!m~6q7*$&+gwo=|BRAhg7)CKVzdYE z$?*w(*Sd9?-x+MVJ$UZSc77MN4Sc08zFYcc_MDr(qCmv#5@O_u2!U3KEqjVrjnQ(T zxj;KUcvPe-EtHnJ%=22r7qz;gAxc>)DJ5i<_MKe?JK+T0Cb8dTQCCw6?Wq13mOYht zNqfK~JM2}JdTmiam(!wf0JHVV~63+FXITMp;>LbwzQFRgVV>K6A{}zRw@x zSF%2^Um9o+P-o-4vchVzRA0~=;#_PNM(L4u1krpT_FE#^BVX2*0*gPh?Z?}v~#|JUl!{)FR6^KazxrD zH^fTKWo4$a*!sL z0|};hGPQO^s-|%$T2^h<*}?{|WhgX~Oy1hoQfsZXy%hW9x-FwC!ovf7?m4?+EH>*q zOs>%>xq0e{f4VK8_~Tzxc}VgegD$TCe@X=pX;XK?1XW^k>9xkq+wQ-gj@51Eb#cBb z^ZK5lJ%1kOI!vZS?1ts`(pN4kyJWZk@5=bZ;Gm||gcVOu)K(hjIBMIU`F&_8^l)~( zH2H3+8w5gX+)?6x!&!+S`mFS!`heeAT|#kWp?&jHSrTS3i^bFp)=TV=N61a%7ZyZ^ zEr@1|*lg`xSr_yL?JnAI9T=5EzOcn{gDGaCJ=eO5pE{p2MlAMty{)WN?7TKv8eC0v zQ=PQ?y2jq*iq}oFei)Tu1Gds;USRca>nmv&wzHWOh9-aJkML~)zM+7}QN1`1IxD_h zY%=lrIq>##C~iX6B8~xe&HLm2HXn|E9$DG5!{6@1adqBKX8|q7%vWoNLnnA|#|AnR z7~pH@Frdf1LQX|5Uqwgbyh_qF7`bdP^M=wt+Z*2?XRfQQ+rckxbNA2o<}f%~iZlc!;8>Jda!T+MSGR3VdcDc5ZC6iBT<45q>!v^MyiPiPLuGKN zt!*e!`DuhupT(H=z3aS0 z*XEAw(V4g<)K)$2m>U?FciMK2(jlp@gxcIyMVt;u#Uj7Q0h;V#8k^?*5$t|0gZF?# zQ?-%0sxe=vaqZmV*_zg9eLJ0?T4Pb_eU5@slVVfCzt11Ep}5wcq(Y2mKcu1ffw13Y zrg%(NcCpfdxC_XQL;oNqgOFubD=+_GfKToiZAfmi6nf=Vo}_&s)V4ho^#ttxnhHzX zwxQOIJ+9x<7X#?a0Y7P;=yJsa1LxNPR9C*nh;2gwYie{;xa;6#+`D2T`cI1=50DV= z!npyA_uRPwVLP#hBzFo%;N!#okwkumhWYR5XS^1V4SZ75^EZDZ&UlG)1C9Pye~xYX z+qX|mBDzgF;vM%ZK~}8NTRg1khF#vW@Dlr^m~T}{zvQiAzBRD$)9jpcuk;rCv1SM0 z23eb$w~)cybV#!SdFh33W#LMsS9rIEzKHUrg=Z;`aA1C%w|hqHBhT%v&W6_${(X1c z(SG~w?fAXp4*tv?cXZrwdk21Rzk~3ny$(9~*e{9rNiAg8T3uem#X0?@vF&9mqkc>a zURC#CQs|TRV%mKV@z?pMa*vrW|cqA?k~oNLlHV! zJ971wSmyJ+b1B7*3C}Zj z)OoYx*2Rs9-HN=UyKCtwHyWz5g9CF;Wp``toXq0!n0gy|kP<>Ap18{q3)<-P+h4Kw zE8e(x0lwtjQeerW5WAd4C7+QP(X?zMe3M1}OawlGqv4&1 z_nv)MeC`7hfBVuES7-)vJL7Zr{0{jp`nH7h@ysCKlKJcs{HODH-olm~W! zdHAnq`GCIXKZU(;(++9)a9dX620p0y-^k}*vT%0&NfuT36rx9q@Fa6;{!!XCiu#inwOciWzZn@4yM=7n zS@MrvuIAGyzewl~75-M*#s~ODJ`BeWyqFvItt3>@iQU9^5ykRDRGrpv25VZrJ z)2+CnUGmLT`Js%n$q(g|{5-k@p7^iAr+SvwL-niq%j+k(QuB}Ys_^0*p6K^3WT0L8 z1`zOBo=@$n^s4#Pt_q(bGV<_LznXtEq2`M-Z=(KQWJqlKs-^h^ujU_>)O_*X3iwxU z%sPqQJK1%jesL}mXUW`*286`=O)9*~XOd@?&$qFE5bzj1@I$B`f3_Y~N5fL^FN%7| zfj~W&iPPPPpJQU~p};qGR99s8i|4o4b+DKRGG4IIPs;{#f1kI|BAb$tajUL!Csq#XF&)F&s`^GZ(FK6L3n4R1! z>KOs==o>}Z`oTNIcTgXlqo!{`M8tZ1Q^b+mx4JmxrG=c+_?hz|-|6EJb#1be@6ak; z2R?rAjvtC>vK#ystBKA>#=I7f&NndKcG_nn@_eE(uG;iFm(fkKr}C+vhC1L?TW|pR z4rFLxAu>z&`c34ky75aFs_;n&>{ihaX2GAYXKiH#^6^bCz^k@z%X3+H$R2&SDr;N0 zA#1zcka_wBgPW``_`LFWDm>wHfre}!DIpCz#`QUTu>XX7iIB*jhONxue}RT<4Z&;C z&rdGA3c6^l{X5Rb=HLhMWlNyA;9MwLcx>S*K;t_(CD1F{Y;Xs=1!!%~|6;l9G@2b< zPFpG-c&Z?BS)xHovUIDEB^7={7M^7N#)a4N@FeT1{T{pm z#n4VEejXKlXMz1T8Ovx7Ge_8-)>CNRTNqQUj3HbRmk!{gbK6G5=jTRFy~(%nH#5cb z@j3qH=mz|a(&u5-^%nXj51sq5my%u1MWRsW;-^5=+OY!jmD4`av0=l+Cq5y0u0G4R zSv;wDJe3>M*9boa9timOID1m?#kYX(*a$y`CZiG?fH7NyCta_?e*>JMd=>s*kx%dx ziTXS!AbUvllp&^?#I7R7+cZs$jZJhlHnvMziuJvV598!*VwUPAe#^)IzK`QbWrn}& z>o`Q?$U2w71Uio~~H+~n;r(l4sdPBP&UymcX8Vs{?F4fT{lPtmu= z+?dU(@W(~IaiK_jHl!^fr1VI6`QvM1!sICc={Ma9J$Nw2TA7B)BW z*9t?ihLU2F-TXncLE|6{KS{+&%U3}s(RhL?0}Yg~(y)r9MLv3yua}-fKDABo55is% z%|+sSVcBs8+I}f;9R#k=!&Ya+f3p`AW@A$C&ieebG`w$ zshIY-K@7##I`tGhmPZzMY>RMWKHgAdqVHXO`qLBZ*1gj=udbotmAUm?-@VHA!+t?G zY_8B>pAq z>QSP1^O3)%pPf4nbKc+c0l;%cXL#uE`ZS<~@8Jv!-@(N;{h#Q6=a1zyedgSRxBOo| zq;qb9%m0s`*nys5e41SY-93SrE%qBMia%ET?c$e9SV?cm1ttGn@?vSIbYE!(tSdAQuocu z^2$(UPvz$-AFO<}s=TVL>Z+>GRsFE)O?|a~P`^$8G5tyXE7jrZqt$m;f35mQhLGWN zh94RwquCfRb{W?hw;Qi9e$M!q@sFmBrk|LT=5^)+=9|o4G(Ty6+59Jq&LUf;Ee9+Q zTVA%7TGv{?SW{dRtr@I&tmZeiwYEEKU$#AOd&Txgdz*dQeu4ci`}2-~W2Ixe<4VU- z$Gwg(JDzg9;&{7uvi7dp=bQm&(z((3Ugt^Y%g#U571V|6dg^Yfd#3JH*(~pqpOoKp zG1tYeCtVr0&TVzO-C=jDyVt$VeboJevR2uw>`)FWUsj$}eyBXJ{6=}hBYAWlo5$yA z_I%9qCol7sd#zrNx6#|>UFn_hPJ8!wFZEvQ{fPIt_ipd~-miJT<9*KiviEiG+rDC- z(I@-DzBXUKZ_KyVx660f_g>!(zT14C@uhu_`kwMV>wCfXs_#vIfxp9_^iTVD`49Ln z^}pADo&O{L+x(yK-|K(a|1k8qF)nVb6{I1~UuBe)649+>2RD zVPUD}VmxYv)FUBP3hm0oxo3L5j&<>)EF^iETk64m2lGioSliu*{0zSRvy*jES~|!| zr3=}J^byu9eG>NsE)T9J@qChvU=vJIz#l@MosDQ(a6f_TKkXPq=>_Wj+DC!>k#X!cVY%s#nx=AX^{RwF2p1 zqx=fULOtNAF6xKX;BPCQD-6UUxKXcQ=g^3;JymiC^JIF;_wyX`~?=& z$hgLkhCE2O0r$rN(+yAlcaRm51(Lg7;6K1xH5cGHfs5pd`ecAvaaG~k%Lf)RxR*#( zC=dJ!9IRRJjO6`X7s=?ku76^kFfh$xe9#!lU65mv<=iF43yqn(SQJ+y=&%zl+`RBV zxPF@-J4DCQi^k2;i^fe({)z6T7i6F0KX(b)hy2qRr16m(b2J{Lr!ZEoW^K6k;u^&@ zfh&eaV%g~RoDpq{PjY7ofK+# z$saU^2K$yjg8gm`z6eb&hSfXY#+o>UYuO*g0P=q_{#Y-Qz26pX9Mina@01yPKLPO9 z;af8%GYx*J7P=epOYIw3frge7KE~b)Pss?V21G79QP*ZR%`RtGL4VxCzJMs*W9;kj zv;U1f&Ax{i){oe8SmpaK_DjTrehWUn&fZ{evQyl|?Yx$|cmr?ZEBQR%%MbCZ_)*C& z{hRbH>E{}s=3|>Y&Cc9;y+$eX*{qnsogUjuTx+Qm|yV`AX+uTlfy?dp5+CA_6 zHs%?Gy9;r@4#b-J*cLX!t^ih_M1<~(nBjd@%=e#S-vL%XVE@T}%${d2vR|=R*sH+m z59}}OuPnpO@bsMA4Xj%E7{7q;Oq>Y7=&# zFxIf}U1nMMH|!u`3%|j2@4~&vEyh(X)){GzYC--VaJ{kc7M==lQ9sb-Layi~+`o_uG z{`%(+KELt#70-A5=`$510<9}&Om&vm$cP$VgJeLh8bbe)-V61jAJoBdwcN(Us! zhiAqE^sD|YP3Q8?ahKQub`c^co7g0+i~z@HAVGJq=Xep~G+$=_3JdZ>^xId^bB{s3 z9${bQjQW!6c{MjeqCDJ7b#ov0^R4_mz6qc8-oQ7aPr+C9k8j~AO7U(kCVgDy;4Gfq zIBhz`H&Yr<{d|BA^VQN+ zZi%nw6MT@v&T@)sFs|Y4yaQYPyLbUF z0c^j1QcjPJA**-FE~ncl)iyOHpHQKJQ2<%lCpq0n?;8p7Yh#l#xN-fAoGu-koJNjJ z?@B4vN~zXq`}EY*lpWkkm#1daY~5s<4HK{n&-UT8lTyy%nTM;`EI~Y6$hJ>S&CN`u zdHvK>mVzmH4)iF=sYtpoEDy-(0`ClH(x%2H(^@5&E>@E00Th{zq>BW*!3lZpgm!yU zrk6ynT}7XM)0*jl*>qvZg_kM$dii>^b)vD*3l5D>PLJ7V)=f<+Q?4mF-MfAg@9e~v zEGm(-Hk>X=)t`i(5L_?Dqmoo0ElP4GEp6YC=CeQ~tqn!eC1IJc)q$)6wjChAw|9Dq zK&JZzwx!{dB|4TGNQPW_!6^$b7o>8v7G4h&QXqX=9=Kkap-vUdW_Ie3v}^~GIV{n& z%1po7M8!FZr#&cz!g+n=1`b&?BssvMH@L(2*r}e36`TA)&tq0p8>FV(C#N>&Bx&A3n zx?*0rG?F%ihsP&}*Q=R!7xE1v-x$URS5q4%PgGZ@(tIYF*4NXJgJ>mBRMJlse$w2G zzR-BbCQr~f1iO;gqleLKRmi2FSS}5Dp!ZY+BbnY#fs!HMKZM-nopp{bJb|dG0w$-@ ztmh;&k&p*d7}`Y|n3zmgD@l1Et%LYgC=j`%JpGW>$`P+Nuw*hx95CV?pE+SHu1|lc z-tLBYn?a+gK9aVCPjI?h!Ed_PgimPbZVR6%pu0VMqLA*6@QEV2*M?7M>Fx}lD5iT| z_(Tca>%-uN%KvoHG&rru(KJ7gMoT0eUh>kMe|eGmGP2~QFaPqO`ce+FbY=ZH=>$;^ zsH75|OX+igJ{fqqK_A@}&_{O<=%c$A^wHf1`snTleRL0iKDq}%AKgQskM7a1+$9E5 zLs*_pTc>3xJw8n`F@t+LN;2CRPB+x28!#T5FcgL$v1c8S%1oO=iv1lSAdZoAbFPa| z=!ynN;?hl_6NTI~FbSndy%<}fEGYzxBDmE#2_3+X~%mKRDF*wmeWl`e%ck>x>Uh#I9{?8&_o z#HgH3vx&*5+y#S9*h^|AD$RFAy2y*CRd|*6UDQrIQ}U*jY;QsHN75^DtqJaDyK9;p zoYP6pb#X8BN0hiYn6{)Q$Lz4Fa@SP!L?bt1-1aSdyUsqg>}_({+g#bD^_^ZK6;5~5 zF9paI$~D*@PIuN{5Ah=zyB;I`T)3e_qv=MVI3P$SG4`pPpMisxR7odsRxr|{7(kQinaf6O3>}G~J3(zWN;b!>EoM4e116M#AZK+}02m2f%K55Jou1t+ini z==2(}c{Ge^%^(tENN`GwhfiX*kHk78M9zAG8A8qk!BAoY!BAo&!BApT7|T{Hh14Wc zuPKpqz>8A51zwc8K;T8G3k6=3+9U9y)LwxXrS=KDD77Cv z?#g%I0r8aX#fyv7WFL|TiRlEEPU7hhY%P)mb68Ch%n<=YF9_yh6z)k{Z^3!o#l{$86xbN%0h*r-zG~`Z#4j;irr* z7r&SBg5K+9;US|8CQ?&V4>e2fB4eRO7kZd4d>~zLBdl}(eT8#HtiPYUf&b;tiZiy? zFj~K5{B=Y&wk@U*TiT4-@M?-nNyo+8^QF77YWy^RbKy_;8dJ8crkdZ3>qfNX;2Sa2 z)IaqEJf%6#W6;S|`onHbHkVCnn4evkO&8$I&CzVS5c?0lluZ|52iv3BbTJ}d6hEQA z64s5#k(w@LZ}4C?UB+Az{tu7>rkq)%-fX&peNWnyP3r^MYXJp6%BD-$vwxh`C!JRYvc3(boc=!H&(Z0hM z?%sE3|2}!;We4UD?wQ}Y8zAfEcOKa@bFeAe*x1|&<0g0Jz?MQqvS7J)%c_vGFE`E~ zJcM>+QCAM~thF3CuxI!DoZLTuX!p*2@}~Ur-TSDyL-VrW`R+Zt4__u4K;|5HCSS7q@Gg1J z{!8SGcM}8AoBQTOxxEJt?!OqwqC;n956>Tz56;i--??wM=uUap;ll?Gbu=_wa>*sp ztc>JEB)b3L&ISU&`(5*U_UxZgsf^C<-}}GIlT7XIo|``;pPjSBog;_l!vgdDM-GGb zgS#(=lwFJ>csH{L$O@qg6CHGOcz&1O*|oQ0jm-ZDzh;EJQxChXpu#g4@Q z_FV;$mtwo{j!GTIeS5Z*QRM8z^FHKXjytutA5T%Vau}L!x4?pOWW*gWL&TL@CJcAt zom$H}@pJ^aRDTo7HVUdbQAYjOc}8vLsw={l*Y@tQkWVYQQDAx~OOLz+uhZ*%_qZGY z{d-X3JnVtY`f;cFcM9%o0^bgTV}}r>r9LD+9>zZz|38e`Y?}IKjo=n>Tn6NBz+WOT zJ&gXL_an&LhaNwKbQ0zEir%3&6M&dU&K$0TNXdxv&ZC8ccs_)dFFS+F=k7CEw5&?Y zK2d7~bWlwsX@?M3KO$NF&$1E`BM8_5W@Nqs>1s`kzG(oT_=lLb|lWYkA>MzTCp^)yKwy{FNp z_CNLL-mDg1e0zz&@-7CNm*NC}IXrY7c7;?S zdR@)7VaMh)`1@&gE&Bjg2#;Y^_k-*v_96BuUd&5)DKBIH$Uef$+2`1C?AHD;Ru^x< z3gYeTHD1AW?6d4BujEziHm=8tWlz)R2 zPZO;wax1UlHmn{$%+iRl{~Oksw?kIGfYm`ecd!ef#rHx|XsnZ#e;P9O)c?HBwWxB|HoU^SV|Eq}K-qCw1zi2}#&~e!pFx4=|yBv{G;No!On4 zo&C*sezQ9}znMMkrC-o?vjgkqA!gWgsxEwy*1pLcH)5Oq8SVL`={6_O;0xw4p5$M~ zlKmBCB7PM+`xEACym!1}ve?vrh5h<(<~){ktde$$ooc7q>0$>}8|ZAYORBXIJ0zC& z60F)~dT%`%*wqNTj(;ie`52r*gLV{ zf1ox_v95}h70W4>Rk68>1$4cww;ODO-H2U(lWk)7VzX_=mcGSqHJ&x*L-Uc--qKuB zQnJ|hYfF58VOikMRe$cnMZs~E+tgbB#m3?Wy031111}%CJFKC(wV{36rmc;S>2Ydf zb7L#L`5k`3hWb|CH{=}2rmU>=_Q0?5v#+g+H}WpCO}gNINL6`cNqg&dO;%buH{ROZ z(v-`fq-;@DVq1N~K&I}7R{Gi+UAS?3TYW=AV@sQV<+kRn8~vCOo7-EO>Ra2lZLM$j zBb{1552rrxcQ&?eFK*iu+uqVBUfY-CsGw~#eN=XwP21aB)u&r4@jIFyllUE6yG3>y zo0~SbNrIMUKZ9D8D^{;wVtW($Zt)9I>mNAvfxje>pwai;CAng_jk#TCNszkH_hU^cc5zdy@})?%=N~z%0vXza(k%C{(&Br|{j#D-0>@!UnRm3oPwIJJSl(ACi59lW~4w)#RW z^S!pg^rhvh$R(xa6|oh*h`gB5C}J!8w5@q*EBrQ9S}`}am`bQ`!;^Lq+nASVZbcy1 z9ll@2V}~!oaKCk#S2K)#BlA}DXPMI>t6e0_<=)(4!i$$KTWLl&wKi@sQ?}N($x~S7 zuE<<_Nj11{^Y%j~yrr?V#f(-rt?mp`%d=0;y3%LOE%$p?))F^X{fOx=d|~)a!{0M@ zL`3stmKj$rAHB@%rHs(I-XCDgD3gQ%+J9uK#cTRlhAz5n>z0-d1cMx_+idH zuQ5q{OD>;6$|(87ymOS}Q^dVS_%829Lxc~Ja`;_Z$}gCUHfA5SyX?2^<o7CmYc5|pxQjVd3+U@iG=*?I9n1u?NHyDg$8>-L93KRSz+un{j)0?}i}+*UIOql^ zz)5fl^m|zw1|z&)JJNf{j>aEDc+`wl8M4UWUv0Pd3i>gf9>)y&9FveF!;G%8^jO9r zMUUC-J%c1YNRmO443cD!B!eUwB*`F221$C5qz6fQkfaAmdXS_CNqUeVg9JTDkU@eT zyVQ)ccY`|eFW}!!q}*A`+=a|t$lPU@BJ16tjyS%92Tv|iWsx9@1X(1=B0&}jvPh6c z0x4&fD`e5X;p8+Lq`^&~+B;$9^CjQAKn>VW*lBP9Tm-$~E$}w@khC9xkHKZ&d7ah( z>dPXbE%r{>5>N)p!2-f+!CJ76^Bu~Rrj{>IrhPD+q0gG;%3aiQ`a0ZCrED+2cn5X= zXL#r}H-p)fWgdP9{sH0-foAogA?E+I0gFQFa*LN0!DZ*P!qz_ z3)Do`77;cFJi>KGavw?~?I&6~xUqc{_3z-;1*;P4hO2NZ*HWWF6#uwMy;tKHs@&CBd}kbWQje)4(^{{YuH z2o8b6pc5PcM?n{9kAdT$8=L?q!6|T>^UrYp>);J=7MueY2)_t=!CT;M(2tz&BEx&c z{|meiJ^+`{46OrU%Ikpt4E%S%f5wg@ZUUGDCW9H&$xM9Ozr7iMpnfW-qe`%V@EXEv z@fYGR0!x`&d^cE5d>#I3!q$Mbq~V@zA7)?b_deL}g6&?|?uG3vZ1=);FKnlkZPBwVOEAGO{`t@lyueb=dV<}DNVKKKA!^7?XjnQ`n-0F%IE z;MaCvP}_Z4+fvhfb;R;@0L#}*sNp_pxG%4U`(Q!tbtUk02O|yh=?B(;`*=%V4&)07 z-vCd67fJJ1@Hg;xa2|LjNoOu;d3srSYRf&3Ri5gO(>va5jKBXanKD;fRo@9@XSPVpNKB>p$mQX9@cCu11rfZ#1n?EuyM_h*66JqMYzIn zavsi^d=4I8MiEBqv*ZB&L2w8h2A$vtI12iaUY-pjSYtAp<=>e$$M9F^PeC2{iAE$q3hy*6*|2 z4K3aEwZZ5AM)8BZU&-o!EBs3C2k!${mvyM)fqTY{drLP?;j?k$bVIYu+1#zJ8yDQ& z^6M@XmQ}_kvN^hex4_}N+m7=7$k$@_d4KW#?w#iNnjdv;14;tgU z9o`;|39deP=GA+o>XNeuuI|Z`#dtsU_T+LLLVmwYoD^dH6?{kEjQxrCA(wNyc)!2u z$2G1Aj({h5qspTg2`hOy{7bbZ%i`uFc*$MbC1+{ZXY%se3LbIfO1p)=XkF-AQF%fU1| z&3ukg>Y3&d*6Q4B)-zH)$JDdRrouEbE?sFhSw^2t6Kigkn`XwE>&)j_%k!Yw!Wi=- zj5%4}yb5VcGWsuNNh6(D4#e)U8~OI>Nc+KHgk4smoyPj$+bU!EB|)K*aUIJ)8LT;b16#>CIARoBM&D&boE1Y+>S$j-j2teh^-_HqiI~xgNW)u1a@Z_3&XQ;t85kL z-pQ(ES2e(a@B2**&OeJQdf>qQDiebL2XWVFErej8kj-lOHOSaKLG3^)}wBk0Jx zNb;V!MC^xXN=&UM4%!l8J+p8P({NpY_C(=p1pQNs9*v|9q@T+CSUZOOajbt!p;;4f zCt3az9DC7Z+^Ke|N!aOjIl}s+shBz_u_d@=mVZS- zH_LIQ)fQ^2EksY}AxX8Z#$8|+kY|nMeF3XdE&EuO*q4?aMw{<3Q8aoPuC($(t=%yC zy^@gCb~O^Nv1@R#EOG9`_F?uPLGy=EpP#1H&4JBZ*+R6w+t5mBfnlvP=E$){wa#K% zXO7lcf!0}p)>&NZ$!gvBwG!5vu*!Q_8Rs+hyd@MU<8TbiapgCx%!ZX&tIS$u)+)1B zS&J%bQRRz26ofBF`Er!6u<{jFzT(PPTp5WeBQa&f=OU(DgtX*QEvsm{qZ(~hqeFQb z&Gb)riKs?LRf{8ejKl**L{B4H{;=w4L|KTahB~UDVb#ruGQvnZTSzsL|0_oO{FWXH zv`_TT33w5`bMn}UC_52lC!*{`RLdf&UlC<0u1v*MQ=+OPQPmNqE2AR=j7ZzJsvSNf z5!H@}>P1A^i6di_JK}xl#d0>wU10_8H`pxq$ER?`f*`Fuq#9ziG=6AsJlzuZ*6bg*kYbl_jz@H@Muf>HuDp8_o%yfNBg5Y%uDM2THROM zB+Y(xJJsz*N*+1axFHS6cj;k}F5i_h`8J#ZH>x4|uCRcuC2$?eJl;&`VF`VxNV*2eFb1Lc}EaQuOz*?fe!C&u_5xe3vf* z|Bg8b7R$eUrEUtYSdE$~!!GtVt1lL$2)20%E5NnvTV`X3)bf*%H5xh)V$J%?ACs5N zmTlCz2G*2w_mzBP6lgZ>Ozb<0a0a~4E1nMF`4;?p=;ZC2cV1uf`F(=$ z9}R+#={#-oxjXSY+P?Y_K66gn_Ni0vKlqESg23_w;YUZep0at1VPw!M2#@vQdE-|6 zu;`jh8~Xnq{#~(k`+2+CuN`|5&o4pqhHYn^y!i`@e|(Z4JnF*)O1E#`wNoq;9>l+M zP~W~|^Y&9h-yb_s5PpRsI(MFR?s-4>Sq=JrZnq#Tso8nXDLc1jU3WE}kE4FJAPSkN zcY}CXkc1_I5OH`N5uM2tVk{Jie3_kNlYeo`uAEah$v>8VylHFB3$bJJ5&e7O;Yr6w z#RA&!*3$2I>!Q^5k}2Yy*+F754IYe~o$!4o5Vt#wCcE8abR5*aB#%C9bZ8IwXMF4{7cw@G0bCgL zz=CJy*oB>5Zzq+IU8l2CNgmr+9f?#^v6PltP~x~hm5)7hmpQ_YnWHqbjq+{D9qXdg zJ672l<*68y^vV*3U3ywWk0(5{XP;}ZAw1w3%=frlp8Vt?zUA!p`@5Y>TqPwg94DNQ zsS5Gm)zejxIvV3+gt2uZ-h9!Zj6KV#V~^$P^+v0u(&~4$xl0-=?bVBu#+5I~%{7(i z+>XVT;_3!lS&hX~01_j_@aLHLs8A&cI@+1o8UVUT`HBtdGK7LQ3=BBvS6VWB`|{bH z8yXrmbUw7d@667M?y=Ct7dxB$MsI)h>6^j>_9oZa?3{{$`nKhs$-e6K{dEJ?#@Zrh z&>m>Bi=If(QDdgDeN!Kar-@Gq4veiH4pSJzJ87mi5imr;`8XpU&y`Cr=nt;$Ggob0 zzVxya8yio&Z0Yi?Rp!3c!Tt-DvW=@Q9!ZT4yslio{H@a}M}k zxO;JSadELRFVANvGFI9w_98F?f*F{R9s_1@g6Dymfl$o}8M_7~a1J2E&l5q6kNPl1 z1@)S5R8Ao09yfy%%eh8gqma({*gG+H^}J&z60tcUct)d8bHPxh60+mQ0Pr61&N)7t z9|J1$00wXp#mjLLC7}cuC<+zn;>S@vgE$K=Lu~ZYQ*WJ^xb@WAZ*M(mz~dP>sr7d8 z(aAn4i}EPsoam4r&js zoZ5pIFsAfU0AV4ir$ZzwET}i)@hQFi17{_W}8}?f2OuREVXG-6JB(|9}$P39_QyXt*d_0_))bSEAmoieDhOMMQE{#(H z^gmU>68ExaX8*cbd2`B02WRr-q%n^jn2j%M^P79W@e`Xe-nldP+t)Sul+M>9@$)I@ zl1^r`{Bu?-KVLg4Zc8|nDwlo*TpAc)p?rypJPNlqMM#3xn01F3cCfGfX_2>Wb;Izk z!NFa_u?rk+wzb>4mtA>cIDF!j%VL*~RmneQI{#2p`M@P3;M$!{k@_B|#9@{m+A@0g@QWSbT;a<0OU<{Y2N3bqs;{EBovplDhM6f-vWLLj<3X~)lv88MK2 z1~dqF0>a?JAcRDvi2e(Kty?=IbA!cRik})lB;O_~d!=$A5Mk*S0!h|*%Z|B$kk`tS zhNC1+6TiDSd5<%29tY<>ugi9J*XZPLM%fyb>u}D)IhS}b=aNL-p+C^s(AsHqJ>L3p zWgjK>q0)3NPYZYQ@j0)JjVgRo5T`zdHvNjq-S{)&WwFtFAFA1-)Zu(f6iQL=SYkce z-m%fO!+WaKdc={$saJquD~EZJ!q=%ksu|$mDRou2q^Z|Y+b9veEYReOMEaP>Sz@D- z-Dq++Oh)@b?TgZzMj)XT^34G#UP8Zi=_2%7ra_TL&y9^fn@+D)dOvffJ}XW=js7bo zg-a<|!^*@)e@ARcX-51EvItw$tSUtX7$a{IGmIJC6kY_vYRyCZ90@V`9?lgLYU>CZs(rEw1^QKo=QBtBr;>Wt>fb(HKUaemRyaw7 zeh*kmq>#jz6nfz8w;M)B<#*(FMn~E2WB|; zIXFI|7nDcs{4)xM6S{du)h}c6lYCwhXsnP4oaxlru^WK5tN09Egf?+9X`0$Bp9Rjb zYe?aZc;jtvf5n;=2rldyl|XS*28;_{Zfn4aYEZn{w~|SITG2td)e}<=<_Pt<9saa zJ{l`Qk4`rl9lyCp{0kJEIY(vhD%R2C9GM#q=AP^Cx#eJv3A1ur8^^Y1GPWh$(ehFE}40fGSr>2lS5o9w9XGR zOQQ?U4Klk?V=QsqaBg6)PgNGBZue55sX9J z#6E4Gog0oPlVpOq0eUM*0-u^vSMWE2mmOu9OcJw%F7SATN03!j5=?*?6g*qCc9S_( zGqT1;Jva1?j`rPf1B|GhXZGEo@Vi)dcUMm=w5h9mV@RbZl0l_i3!o>NV8e6In5|}2 zJLDJVoa$wG4&_Ucr#*Zo*<8ZYg(R}%(0o)|aKen9dGGY2hcK(^elJYH@p-Xz@?C5l zJDG&-sJ$%!D{xespCWsERC%|IxR`FvG2Ed3>BcbH0uIS?C z?yM|B8VGWe4@_D}23%c!f0s*jbTGj)^%46g_AzwTh$h2=<9chrc*z-LRLlt&82s48 zeGX)6IHS+BbaQj%@^+Uq+)>&-XlrQpH~W?>EovKWZatyF-O^?C4OaCvRrZ8mtf?8P zFKrmEsq3$|=Nba_WzL8_XsvYj25MI|)b&)CEy{N_)z)=Xbm5GGuCRY%-!+hauRug6 zQ-dfCNO1Yoh{QQ}4jGr8)I6}U-r3kuQaM~x+TijwdJ6jUTgRH4PiS;Cwp)GC`jW8E z5w3ExVeHH|11)3q!S$_m{k8Vo!irjFd6mTxE~}~NuMVsXSNGJEFUt3{RJ%eYMqi8g ziXxpVP(BPOTaFh>MX*0EIQQ_~b$o!{9@h!rY2ho}AgnrGSm$=UD0ArE6jpIL+mBc9Nr6PjzO?sF0(*?{CsG7jm( zfRuZqW`{Jj-&+)X&pLa}5~bo`Cwf+VeY0U9jhvf2i>GFYwX@?%Go(ygtyCB;0u00# zXMw<*PCG~jAupXaFgql(S-4bKmZ#qnUdYnP!x|Oq*KF&@tzl}P*P~C87-yT`3@JHz zgv=x+Kl^M_EN7BB>Ms_$vWYPu$)ks6#DB~V!M>C@5Ks!`G;oPrc#uov69Q3?=#-tG zU$2-U+&*;-Gz7oH){+VP2?TGlCAlRRV=gv)WE1OW{hMwTZ7{SPMxETLS0ysHz=Gpm zEV`IZ$6Vr1pL_a8o0#r}7np9-4@J-9E24zz_Q}^3y9{q5J&QK*gT`CAx!Nl}`ph#w z)Y{4y@k4XJSU35cxJ2t>KPTcu`DkoJPkGq{YZZ-8s&GIGo(ic@B#|SB*~?dLL`>!*nMC5(w1Moy=C8>TV8t> zi!#Y1`9b-M%q{<(oyC@OjG`qh)dHf;cuSCU9ed{AAKLV%(LbTZqpVLp8z#aUc0DQ* z-o+|VL`ld)eNZYBjmF!24HoY|D($43Aq@@8-u7XPl%Ft`f@5t&`CW}BB@7&=Mat+q zF-wzR$4N<`JEp|%8cd(o?BQ|4_-9lAn^Sb=n-YP=I%@O8Itr%;(Bn_GkGHwo^6|BT}rIye2S39*THfqU}lb*;k0PD~&W-uC&~Vmhkav zqa<4YlX}>%kyW)9jeOE-DLrW%SA|#MxJiBdBhGjMyUKX82nW(dn5*VP*O7J{!JKu_ zS;^y~71A(&$ExHPUy)aBVmCP`WFQBcR`aQh2M)XtV_$m}&hTM`xzA6*qT)p$ ze;@ZFB%Xh6|DTAT1;x1_zcuaodLJ}L@uriP!R^gd`p9JYdijG*hJtYBs0MY}ce34A zoS)aD*VBF{@4`(gR^5OIc=Q4d%;6$MHQdl4wu<;o^U^!SpmKy*n|!zV*4E8~Jc8)k zMQr`#-M(t@#%zl zRk4AIVNAuKC|XiE8O0JI#0-DHRc!TbhgIo=Cw2<_|?RI z$&PP032z~?F0m9cF5oglNUjq z4kRp-p=Yhtqi^5Z)3dcr@3F3ZysX-4@2IKibd=PT_EoGI_xEq_>e}A#A74|^x5Bh+ zqAJwya`lG->zA2UDA0W3$m?l3p~&#FTI}e^IKr2u(uvwp=45M<$OMnlf;L9`7=Qk+ zVn%7~?_$4Wok&V>gyA*J;AD+pQ|A1D^cbGgspK`d?+>+dxYC2uzb&S5M&HzzK*

  • qxcUb<(Eb<-lr5~HCY_lIyYIa$Let#cyBPxSYvjImdvd2w$+66~5d z5Z9(S&*glba1IGU2QfOt_|D=!;Y&|PV9|loSz94FhhJqu)j2FbB45YOVZ%g^<4$5x zXoIF*537Y0b_;=#r&~KwAvu`)myk|6mx=v9N@zURgzY5mX%+M+1?Z``<_4MT{TN;S#S=PD_~L5y zLy^km+uB$A{j1wMR{8y_I!1SOckdcq^QrFcPXPm;TpN#p!#xL>p)*DxZxUy7;q%T> zF&rI51opPcz8(8%4`F`9KuvspTvKGI%FnKg=beOUmdyFP-|ZchuZ`7i?1u`$%u%+E z==a0D+d89F!_|s(AYH4B=yuSMN|74mw?^@QshN)o%PzH}`cq$$Uc)zVj_LXenDI8f zDy+N}!Hbn9oScDnb4WKN2|En$&XjKCf2K$`2O+CI8dGs_FM1{FO0<=FK#^vZp2YFd z$=lOuS)8rioFqf3@`-XnRo!j&p3~}X@{Aq_z%Q=`zm#~c2zY%a?MdQ>2I2+8KPj#y zE8Cz5*SpzW@;Y|c(1rc=YkDnJr!UhoYL=Z|W$9g0-+$o{YmE6uE}1>2=3<2heS|fm zF|(n=2SDSoSBT@!7h7}Lp+mK!&&(ZkqQzCpx6KiFLL8a&5G_WV*2*P?n5!rxg{O}n zzN%-FoxJJj>1_MxXzdNytDW0=Z&0@dd2sm&JUbfN*xj`$q`Ihyn%LkYyc3rDasjUR zh$4QN!W^AyE>>gMtD&3F3%4b(pa?A4XPN80mBX%VUvF@9Q`OQ+&+>4gtJPgrZOL2g zi8u|Ovcg#PNMqM}>-Cljy}?|&sLV9dTifF*ZK-Ojh}d+VzvdVVbBfE&^5bl{y2Iho zVb%oGcg5#muL=r{sZharstN!aSWro@cN3r@x8PaUu&-*sneFMUimYq!4%ODJs4aAL z`0N4WVsE3v(;BN@8SWUj7D5pDOsUUk;;>Z=HdeMd9Gz9cK!dr+@qUh}$mNnBRzYKn zl_;eDE_`GJTqt}j1_5H>0IIP{3WQH_43h6RXL5l&ZK)JSZ{YbfJJRPUqZM=v=-wGw2EOt1_?4`Mf%W;ZHKN1k-GyBD2tmy*fj~ zS?G-JNwM-0EmY?7%Ky-O5}hIoozL(LcgaHM^ScxW3Q<*MK4?y$svuGQy z3k(HRie6G>O`_=R)R|H1({pk6)z@~~(^2@zH)hLKk_3`KOi~_JN5`X^z=PeI&aSef zI5$#h(wP1Sq#b$>=gQjp8pCYoNzx6w4Ar5#|bM3J54t{`#_0EQpS4<TM=4*%u2wO`qDka!m~Ye+DVvC`vto>@N-mjPVZ=^sv?EYe2e z79RD4nbZ@d#h0@?VsdTA)(*s))sMB{%Sd3TQaM?bL;Pe(d6Taw$4WV3iH8gP3}cEv zijN69;(|s+^vv8NvyTu~LkD|~;l=f8Oc2fcb)0Z$+$P)tz;DZd9Itr?va%x%gQG#Y ztbkkxIQ5gm+bg;)L$$R%PUh;a@wPa!Bs+xDYgxnQzP{6%BPZv!w)iXkzGaQ!rCw*7 zKiiO5(McN*nDzFTdc{{T~HZzR`*nh-X5PXQl23{J(wS) z^~w>E)D^oNFg22Q<~Y_YjS#so%)O@3j<}J0ewah4!lQ=K4ad9RNW@wgoFWNW^MZCP z8sBZV0+zPp#AAxZd0~+0lEkTbL1dpzmZLP>DJ%a8*L`7-UZkz{{6K0;Otu5p)G3^X z1t{-t)_vI_(xombv?M{i%O)?VBG05kTHRh#X_-l0RO!ytR6A^}^_uMsW%kJ8RIv4q zN@Fs?k-wXpYrri#;kqJ&&+9jqxeMub7!AkAf8sdB3C_WA!3W#Fj%9;RmR9m!ynD{w$Eq)_6 zFeI*vQ*Xi@^@R8~V59gx)Fz+)MC>4>K=w3MdQXw`x`7X8Vm$(OBDM?SnOcwQUeq7z zJ%|3(=mzSKYWny*l)Cq;veDEZQM*jM6}9Kh`JaeoYV(LoG)iw@pCPsITzjwhIrIyw zyE3aZrpAfbGwF_Mm;;9U)r4iiP%#~ zgh3fKHF9}s68ZJdsVnT6xyG~K^pddhvt0#{v>7J9Ka1%^oO%M|?h_xw&O(Sm;?9zI zY?~4zrf{MTgr1g{<4%T^Rk>EX9${iJ9wCNJXXlTOz1y>-coD^l<;Wt1h++Sse`W?3 zNyz+9>{H=hYl(#p8VK;`2&`}AGHQ3zh14cMgu4;HAm1bq^)GWak5mQ%{%Vi67c{|K(NNOV3NojCfyIl{ON@sZlQyng-d63$+V$0PGCo5I6ukBgRr%<-sl%Q?f|egXTP)u zw0^ZIZN)mz(yx3jU-mc#$?vInoo9tu0>lw-YTw(YDRc_dM(t#g^|rwcAjC2ts(%@Np|VAE9o9)V4vV|)L=whmY}Vdboh*3}IMVA)i((?6MD?^{@cF9ZfW_Y7tyto;>8+e(pVy;XqA;7q8n0W$C1svv!nJ~wepJqq+*gan zS`zwWK83PCj$j&Obgu(Z|CByeu9Dp6w=}kr(5Kv|@f28^*$&8PgkOpYnx$8Yo8%lN zx!<8_mXgr(ALA4WJDF|g^0AJ`2F=#9<~@jK{ey2MkMf744V;SWFQsJpmxG6$kJYQj zDNNNrNNS=5KHp<{C?jO-85HZ}pk2jecL)k(X<7m`loW2ev3!0K;Wi`6M$?{W;!Q)I40-yPl94uBfz? zHWzjoCL(cE2JFU~z^*lg4(;M(yTMypT3>E*7Ks^R*X>@8UvERjlEu0bV~N3K@_QPr zkw73=2JG6+WhIuX=^&gZAd$dk32c9P)nYN583`{(u63Ul{;}F z2Jj@+VEgsh*icQMrU*R*P3W~%C;9zDpj+=i4}xoh=P5%EBC8D7I~-^&X?-&~MK=EI@G3-N zM$czzJR+sHR^*`Y`) zHOIlwbj0R#!tzXL9-T!>*04@isJV6tB+nT`_o{}fWR$b7lBB83l5BE3hCIzIHTf!T z2cI!UFqJDO4+gJN;%f%9RaW*8zjtBwkrO3-L>5rwD8FQK#`sw?V$Npb^}kZ1%Xl9C zN9+wzk!!CYxt1YjpZ{LL-od#>em(;=QGSQzLzsG%J%Zoy8xr}{c?yp%){yqy3AEuoD+j%}e z?76&!645!`?mg|)6tSe%N?Ja_tMu_F%F7qNF607U9pOs1gGCqh_wJzCfv}7hjug}vSBLX#;Xz+T$X#kKDYAGgDx3Y`UVGh|#>rd76}7D;g>FZAo!?ho zT3Tr@EBBX{)t4ZvLT&AeZ76*8+pG9WZOFhO+FCVv02> zf$s+8pQIf}oRp>mnr4FABr8jc-!bU*h$nh3deWlYvbDW~XSpeisHVqdWS27*-q7w} z+FYEQJW#I*Kxn|TP@y($JZG;LLVo?a-F4 zy1+nFbz#jZ>)SRowr}gN8T2UzLf_yXW-gZB$%TE;H@g0mbGn+mL;ZcO!PZlIU^QG` zIb6#PhIO^WmF%H2YtIBcuBjJcoBVL078$zpU=Eu|pL|g@yC$tMq+{|!y+|GgZtdXq z`2QhmhxE=d^BmR=@}Yhtu2ww&Cc%$03JxEEEIWJL9jUNN2nX}hWfGUp5`0G?0Mx>?gO(adoJ;|(V6}z*udg6i~OLhUn5ql6n_$8FStMH zLGAYh2Pu426pS(LUXqrmludD+iURjCaX3{kQz*&Hq(H6um=v2)KVLOaMVeP4+lj{F zuX|9PQ`2#sQ@F)Jn2LLR;6S3*nMd_UftfXXB74{sv|dDo0Fjyt%jH4JG@`nkXlEHz z+Y|#wW{VW9p?0O_DY>mJvV}vOV);Mw$Pro-!aVsaVD-m256^V(82C-!bUy@Z@9A9~ z4GcoTv4x%W^=7l9uqway(8x-*acpD28~67#%MaI7S$lK_#ojAzM*lu&_iX}lN!$ig zn$Siib1bZp#!S5IZ9Ze4l(&YpY>dPMAA`$VP2Hx!pc?mB-BKq1hFzwYzasa*BG|dU zzJ7hD7M4mvB*n%Y)$3;oigeegF_GTB)qQnoEQTa=VGT)>^sqY$GF6?Fao_4*?4bCa z>4~1t6rX3Rx06ex@?)fFLOM_^uePaw!VXF&N4ZA_YwtBU!r9P4jUk>KiPLl)dugw| zwX(pR&+d~~vHNV%s7?N5W0O9XQ-wlQ;Mc5h#7eFgix=9H>yJNcSk#as0r5x}UUV_io0 zwBRW*eR1Q`s)}w?$tgDiMj~E!0sDG2R#Lsj2k#=I`)4`t$DOpQ6hOa0aRFg=krCsf zt4$8W;z0G)x2){1T2^=U#eu=9s=>g;7gtm+)|VAuTpN3@a#67{zr-`Jw4pkv*IPo~ z>WF2)QL@BTyy$UGAC+4#`T+rU8=d=5I2OB;A8IZUB6pVC9OL&+gu>*FMx7Q#Vs3!s z$dlVCZ~QyrNs#WfTPGxG`qqj5&rH1W#suzPnS5%L^~i_V^Kz|i;?6rKKqqLOC@Q)V z`)0wh$qS3ZON|kn5tB?imyZv->c1>Hx@1Ao(O)8Si?VB97ythm`3vp~gx=0~6TdS9 zcS#_I!U3KlxlFigO$;EI;>Zi~JJIOWmKTm}ImDhOW|wi0HseA081zAYQwH0I{b1zQ zcJ&mHWT-MDQr&gRnZWG{ao4dI!t-BOuJaF7*Db3WDfZebe7>5T`c?I(j=AbB=4yLG zP4-C6<|92pXOq+0<1KWU%1bOR`88K}b$45^*l9L8iyIuh<3u}fvjuw|dzq*rX{8Cb zVz8$(<=vSvWct*jTyn0w`CRDXMLXCXJLJpMn=IJ#;t$lel);rB*DE{?^z0I>J0_2 znNx3w6Y({{Tpb}PTQcdqQUsqN9qtC4*j0U}ZGY}Vwr6v9Ohl{M->#H@yM^u8JNdyD zwr?*CCfl#1)g`L?XN<3|F2$X@LHj5p{vx&p?l5~y-W+=-`VehPPA3&A@vn?x(4t`! zJ)J-ybR58)1TQPXEHrL{{eRn2`mfJRBfUVUt_E!EBzr(sW%>7W6TMy@Vvm4J9KXfq z)}-4q@Q#w1M=x$wS&@9~rtL@4MM)=)=<_#l<7ORJg6nQNz&g7Q6(>xd$(a07*ZIp= zoY&QL-iqbtcZ~#AMj|T%%3oZNxlO!DemG4e2F)D!IX>%H6r8vi7zO2W!vjG7<99zD zpuKd(0IWUoWhf03chZi6yvDw!;vd$V2<|)}&Cro>KgN-7esfDqekW#M+3%?;zApL? zIuyHmS9_wSAO)_|i9+O9@`xCf-4}ZzCSDMWkBH-hT}-;cccdcJ$0<&PkRVmsTs{z+ zZZ&ZyK}@_FdqpfnJML4CD0W;`SmK5zE*QBCzq_HTO7AVZ;RdjR&4V}8#{ThJkIUpJ z8nAWM5BHyp*+0##*66K8ojE)Z6oW6>jE27H4ueDU)VRkk6i);mU;Dj zrE8a0RV}Z*;l1~0QRD)f$z&@SC~XVYx0hl)^z7%tE3g7s$o8RAtY!S2yri3uq>bnj zj1yMglM62)*MGCy?Ip&F!c33D-Ckc_5zMKymKt&@EV?pZy|=t-iKsW&^771C=IRQ! z&+V|-ODtDr6&DxXf4{@6gMv@vKFvhjyFxdyCPl&~dLi_Ep->+cU$xU&O-1Z$=<90; z_x6S>YHBJ_=*-~eTHLTo?<*H{V6tH4QPE-B%g+OxKYqI*Qg9^YQ2or~3o zF9})H&IOqu+kct!GXGb&)MlbPnqJf)Hik`;Dh=c zXB)-a2`0L)jl4(VI2{Z;DP?Wq-TaMoB*?{OAs6=8tu=%GL6g^F@tW{OEUoDB8Jv2( z)8Ol>;B8xk9ca54v*EHK_5>M0mA863#1_pi1MCap2G%J4QpJ8kZCY`@!qn1YvsqBy zP(Q^D{GarbT6j-6!2R2>NmDF~rjRKkYvxzTr8~<*<@kS1PfrcKX%0oqu?21A^|r2> znyvT?Tr-y*W& zVx1v7uexA~+V8J{Dfl0z^IW-Rt-kI1V!X%Ok({xA$WjnY4JIc%(R*_05M82hTYi(K zW}U=4EmCOGrRJJ$pTDcdY_93@`?_n)qdn&@Uw(d%@|SIFKP~F_M^9_lK2N`G!-m^V z=YI){r0sTLEYgLE1!l*-KKh;*teM;^KGlZj@Xm{(_;ZSCr&|akM0)wHIht;wc30bjuHqtxDfU+78IAUVc5mm|(eQG=v7*XU8mhNop12>7 z{R3lL==Ph09mcx`qf-=r$)iO$&W7n9;yIGumg#C`055{S2zW{5V)x^ zp5#n))I#kbd5*x(uw=;( zqw?o1C5wGSb#?G4gl+Y{UZ1UPg7%2wRiL}JJb*Fo;8Co8I%zt|S-UgJq`N9HwD{-$ zsW&U;9eZ;$;0)`teox8sWXxGwS-Diql7Cz}92nZxhK%aE)g8`4OD1#BTrqeK=1Tj; zfy*HsHg=}`@;W$I`32W_k|9K}u7AP07U8`BVWA&2u~^FeRZ8R$H~~3tl-CXcHB$UJ zZLNGU^?9r`G#CgBhDt+gBayYCk+P885iBbY*=(WmGaRieYin1wI$Z4}U$(nOV2E^a zb0q$XIzNsCj)*@vQdc+9=4dD@Yj8M%rKLgnC3<^pdDD=;E*i30Ls5^Xy`rMsgLfL) z+X%y$X+CDbG0e0iLKSjJ7neamifMMpCYRVxW}x`YK1c;|6tkBUcMQkz>^1pMN&ZVHSG+S^mF<04TQz(>p>kNngiVcDWoTl?Je4 zA_DUB`j1Cl@+H?rqwHLT5==fv=MwKm67^{5AURT_2HCSy0`mJv5m66%P&MWXPLl#} ze*!6xKjMVqbRr2ZPtPp$fc+eFf>VVCj9!S*kAo^)J!8xAY=rohT@Y1h!PF}_zErBv z!p@L?JB~n&X{s;;s&EXe{Xa$(HveBx1;l#-!^cMzemVoi$4?cQa5F1rJ{8BDQ{TKH zbfb83DIA6SNJ_Nen(J=d&5aX_o4j3|Q>%fVup+ADHrv8{KfT&gZf&Xwbh$zypVd)h zGB9i1XRR&v(pI0RuevT`bm}bC5M&U4i!q(z0Yo@e#W^$ypGt>3jzE#3JepaOGzt=F zzu<3obu>2g*89uscD<*hxGC!I_2Uks0A%|HM?3o?A_J=W+UrXz+%~;K|4~=CGGvDG zV|DtyHhW_^_z3ZuUtz|SpH@I`yk%fGnSAazIswrXDHAE;PdsDt<8Co$@?0QBI^uxhx|SCh`#YIKBe!9l%CV!E@_-+XG3K2h-b`- z)l5Ei5wI$O^3_51=~Ty84ZI7&Z)Oq#?o|+Q$9za1O-0Uc=2?aP2}mQ(g#9oE$a!89 zbV_YoDFRN4WIAH0vpZ@nmRg6s&Jyws)YJ_4l)voH^~(Z*W%bJ6j+2_2PU`5~+|;z0 z_MDBGp+l*(7dv@+oo&<5vuz20QJX?GApQt%IC21&stlGY(t}4gN>He?BW%FlTw!f6 z*zDCdf4IKd*^(bH47B)re0#t3RHT#bt?a5Wn0%&!hN?g~P-3fSuy?c4>enHrib4g( z>cLn`xNTw@2iW<#gv({PBMWzRnj)i?%94_RIqdf}UigK)0uPDn9vI~H_B?4f+lxyi zE!Aa#NQCu2QCMvabXQb#2fXbSiwdNBF&T~zx?hzzbO<(IhwYW`hyO!SeC-sI0n8Y=2zD@|r&9U2C=0x()Sa+{^Da2kqq{ajm`1YOS-|>dMOMDr_E)O>ZkIvOQ>z zI2;jsS+%XO&{l0SQGJuQ5-u-Ms06JVg6_?6m>^q$N=b=?OMw&`95a~%B_)-XMxQ^- zkx05u9EoCsg2bxEM)^li6jfUkBzig&B$7mRl#Q`{%DzpNmQyvV^!xUOblaAqF_`dY z_HWa2)C3WuRnyd25Lq|7m#8zz6N!_Yk2;I9krB#`IEt(N_bIeFay+zSKHB{3JVb$? zQf$qQ*nXOXH0vo{lW<7sWKVs}2H0)NDUHiUDT?=kPw8jV9#ZmLd<<;grtGhT^-g<6 z*UWWBKRf3Uai37==kTlDa~vl$YpxT@N@qQx z8ktl0F}-U_;q{4}p3^+BN#SsJ(y4k!C4h8S`lBj)mk-5pjqNF`J(^xyT!5A=mO73z^x+;xAPEyXkJk1pLn{(Ig@Lo;jtP zB$Q9SmzIhWu0NKRs<>_ux)g}!!u9-M&V^v{lm);&J9@vCb{2H*K9(GijudHo8NJb# zWA=FVbmsgsyFuAH2j<%(cP?O(^GW5OOFLaoXFirlUL;CdjLbA>tTf*wjcEb%`Mxrr zz_iRQc@_Y={Jm+O|8`n1`Q8$hcZe;5pD3A1PgB9P{5o;JvmXA8dvWj=CR+{(M=oMINI^RKA;!vZT+voNTh z2t~7wYX`@#J0z{jlZql?3p*SQQ3 zeIMLHKp2vPeJJN$9f2;JDI64@LEamFr|6i>g9i_CKX$s`2ZV!Sj#?l64AA9>N(*{& zYr+$8eDd!26R9Eb$zLanl_wKZP0S46?h@ECxGM{pGL#+@d8REAX^S@0)ip?YJC9y| z+0nDlK6=^ZM|YB)WU5Ixq_i<{(+5RIVkc&w&fA1*Yr_YX%1T3QabXMM^=TaPM`M-< z1$I4n%0myGB0e5HX6EzN!;_3G460#5Fme&fr>MpkqtZK3^biE3nRu?oSfB%n*Pvk$ zse(_KTIe@VnET-jl%Vx}tI^eFtaDgQCX1ua*yb`?GYvI0gJQpy{Ww3$_Sfr#-XGZih`H$saCl~qH-!9i5EWC={(U{SY8Hw(b-`W?AWHe@k z*(2TZv)$~$*9w1I{5G+%H;Z2@d<8p=GIgHjHg(d9I_Z|xSu9vdw#HdbT+(xT53P&d zhBD|yQcdlUchKN1DfJi(p3)MpfqBwCIzjG;vIC;0YH1*_w5ob25Ez0@4p~1|OO@4H zC10E7f!N7kf&?64HW@<+vso!@B6>OtQ%Qn&z8TH;oMtTLrJdKY=h8l!7aM!h%$a>R z&4YQdw1}{j`Lh%(oh4i*Ts1$Y{x>k0@!7QKlH1ch`d1*?k_N}082O0#U^gPNhcpC% z-UfbUFfxHxuf52sV57q`_7(n&Xd<2xgQFUw@mjnl69y15r}cvPnL8;n>LsK>fhOX~ zGiv|HqS}Ec;-h#XQXBrxPc;Gv(QaBxuiBjQsNj1?y=f@WM@a1lw4C?F$7!27LwFex zESN_G&v)TjOl?1P2Kx$sf?3eB#P+B|wdn1FdiWat3<{)1BVD;CxPO0;Nk6Lo%U?(( zL8h3VH7YeCJX+}xukl|>1-ijlkDP4k0kK((M>M(lU*_Z$vDs+;@W|_&>c71Zol1j^BtkOfm5D%0(hPPp0xLF@i=6PdYoX_`~@!x#U&rd z?vqvlyNR_h&jeaO)ZAhMsc%fi`OekIxXZ6Fdn3~c6F$K zkfbNxq=pdExNTGKv-d%fOR=j3?vrt0GsRyz2Tzvb?n?xR?X4MWv+CQjn@((_IGolI zyedJ-7>vJ~iGAo9ths-e)V!g&dReob@{v5%_BMHu1~wo2BaHn^Wo&M*4|!ckMpHv; z;_r<}oX!{2p(C65(ELtvb!csp2i1{JXwgP?*Vx-l%cXU2&1 z@U4%13_NPjiNhAK8%O1xiVlvaxP%68?BkS_T8oM-uRg}}EmMBsKB)KWJ&IB%x#%!fBpGGeIFBg4l+#$oZ$OD$@OO9StRjJM}bL{QhO$&I;TLYHbWuu5JDLvM--G zc6zm|{^an=^Si1>&K>C7*ir7TEhsF?V$2_{$j;PP+e$kkPG4+SY|ZCS#pM-v>xI!* z8g94NdFuz=c(bH$X>I++-jlzw%2Co>Zs@*nr2m5PVCB&IVCQn@5<^~AVdfu?IvO3; zrW1PF&N-p6?TqVzHHv?{88Js4z#6d1C4cBsT$sA@XaS-xzP)*kz=baQaiK>vx9d;wbe zLr^MjTK@1}oI0Q`+sdgLcu6ANo~E$h(ke>{RLo8>E1Zs*g0wx9sMT!cG6^HH^pXfG zr({7_cT>O|CuD{GMh9}Af15~iIW>zIJPn-{8co3)U+irTq)@GqD>Xo{C%SQGj0Z8w zT-Kp@P%^J|vp>is2S;CyJtG^z|4G7_U2m4qUO*J!Hr^gHr|4UXDUbJ}^b|vm`V(>` zr}=F{fmp}>Kh7(W+mVQ?L~iLtFH;&1(LSFbe!vc>@XOoPFS}!av0E^TI^<3hFQ@x; zNY=_n zUJpOWCLT@UH5rjUJ;yWlIZKP(>@_(`bBA-wyM1L{HiNsM#F)2oQAx9Vj%VyVv$?pS z%8}{nt+JR33u|nd?%v9yv;7DRbPG;k{y(){6Y=Uy3>a~v{J#5xZuvY~0QLtbGVDF_ zQ_<)iECsE^{bGP!$R%M)o5EUsD~cUjb?HIOAAAV6%qlmS(7gr}0zTjUC9G)vyGs^w zYYFkeF`-lx*+Eble%G;E@!WVcN|SnZN;WR=U{$S~TUs`^Dt{~c{r>(+`rG$=c8y2A zxHSF<6*|;s{guA{KpWd#Azwnf6I)bV0@_ArPa$ozwL*Kr>_+8|QSk!2e&m9I0o2@r z>Lf!T{e@1c4weyzZVS6ne*2nhSgE{o-w@Oc{g8YI^{U)OKzRam8%Pn~Jc-xdg>e%| zk=Ix`Xy#Xd*VnVB@v?-WMTnNSUz(npv9;@xpIVYWA- z^XftdSLE-XiCvL@_42^(TW?!=klj>jZ+6IU>cvAta1Ya4Tk6E$vacaB&%^J*3`Y2D z)Uc!M*%ru@mF2)8Q8*x(iGR9&W9|By>g6>x%d6LK*lek8bSS8$}hZgpsdt+u4JrYsyp0Cs&aTvk&G776T}I~8G5 zl8NVe81dFr#A`!@FyWF{uO}-T@$n=<;Tn#o-OWzPEtMD-=?ViDzo}^;(=Ay|^e?Ob zAoDH_iC?O!U0l#%DrVyN^2r?m`iBv!mxMU?8^tWVrGqGZE0zQYM?%rf!vDd@mH2;t zctqv?Qf~iY5`?}p`}14Jnww8(bTzhHebM@ourJWtU>GtkJ*jzMW4*Jnqoi`U#vJl_ z8$D8R&z@uQ-o5OFnu`AF>g9EHeYLhl`JR?)R|xkW)CKUqxZwKMy8c>wZlSB*Qx2vS z28<(9H?qTG5575grUD@KDx%1YS1u|NBi;ST%v}#7dbMf1F!9BUh2u@gS-7CfvuDp^ zNE!$_6W_h)3JDfnwsQWOMGU%0)J@ zmu)o-iq^W}VC#mkzTBp-=&NT>%3l#n8!FAZ(lVX1(PpnJFJk9Jqua}D106mn0{-^; zs+!WO=*m#cmg8w2^f`l-fd-eS)?lebl3f;NTr1i{KVK`-oq7BPT{Kn%Zbq7W5x&o7 zS#ocz->{*6Bl`ya;H!LY{DKSw`6u1n&i;uiauzDF<_*D(@_~)P4LfGZccqLAzy$e8 z4CDOKPAUYZfE6Ii!6b>lw_R7QP;F4|egFQ@raz7SkvXGpMDgRJtPgkEKhJ{fbF?E1 zAUWr7d}j-YYSsEtBA}FICZ$RtI$=5ko&xp{c`^IF?7psXbJtjxGwSc&F;cbSGi&`( zC;q*;k$tu9?z)0ipC0NsMQ;di-n|03Lq^>x9YZ{;RXb-G&BV_ca;Xs9mT=axp>(92 zH`9u&SZ>mpThx}-flJI1&mFrfx;NqEeJ3h!il03mLo1GPj9KvR627BJ!=gM^#r>q( z#ko10Z2MjmvhVL14cro59tbQC-*QXexdQ{|_T5r?@Zf&#LS8!P$<~6k=w$HaOCT{=s(WAVEa1W%HL6ST{X&~tn zIEsJ(q(IX5dO3JRe7HQy14d2Pi(+ZXl2TiNy~R>er(3c}6jw^3-nhhVGF1BX<&F9! zi>2>nEzY!-W#{La%|=U+w;(4!D>FMk%WNqqDl{y%T8k?RmnvV5 zK)i|WtV?=Edq0YVO7SN3E`)_==fxml+=zSm$!>;TvQ5e*i{jPlO{B0eBFFef@vpoF zo=3cDjT_=M&J~|x_rtn`YvJOy{&-I0xk;(%(yF9Om%1sQJ9skbEnjjs2>5h1l zDnrMOJJ4j1ulkI%oMehb={&B+26<~usfGW0wc4*6tPbPCJu|mrInTPJC&8C$F9SFxX9rbtkHMUF?N>x#bf7APL6^UQWp5@ z$O3J>C$oi`~!uDprY`#2<*B1Zvklo}*=J|($-X`N2id>OelsUO zrz2-o&V@O5G+A`pU!6I`OZgO z8LkzsdtHC8h*o^PV$wb6-tPX9r`U6$=S8pIyV85P_nY1ayia-$`Eq*vs?tidJ>I{}8YR)&{;Dc&Dnl>g=i?RXtTTRUN6G zsNP+DfAygnW6gNY9W@`+PSoCA`}ex6x}v&3-9X*ex|`}AtNUAhsQ%*m@6^8;^aO*! zj$kafHTb#Up5Sf4dxJj=J{f#1_+h9xG!!~LbYAG%(04+=4E?#GtKmmsG29-$ApA)9 zNciuKEsZ0MI~uQQ{9fbhkyvDXE`x2>dYP22Xi-EH4#+u!y|J8Q3LU(^2i z_Ji#obp$)cJ5KF5uj87I?{)m7>Xm!)g4>!z-M z>-s~tqdU~Sr~B7Ei+U_QgFQF(JkaxAZ&hzc@3(tj>-}q=xo>UX)qPL&+xu7bZ|lFU z|CRo~4D=0LGH~y}PX>+*x(7Q4&l~)=!AFM-L(7NG8QQ-zf9d9>zZy0TUo`wdv_JaA zW#Y24mgg@2#)?HN3@aQfs#mnE7+kSt#f}x9U2)5b@2+@rWy#9u%J0YeN2HOW5zk0y zq-$i&$Y~?zjeKV0=8?Ncel~J=RnDrCRpC|9RqIxLdet{py|C)N)%mNJt-f~kEvxTd z{mAMkSHHYw^_qJ|eWU%O>qpNXeR%XgMqe8J+gQn1!`R^1y0J6It{VIL*!yeq)|RYY zzjn{se_Q+b+9PW}8qXW|j-Nk%*SNf{Y2Bsko?iFfgn#0ciEmAOZ{maX!utI6uJsM; z``4em{tN5Bw*Im8FRedzg8zgSC)~dwZ$o&)`VD8}f0u5!lv4-k-=FyV`wwl}RM7Sh zL4pMz|NZ(3$EWD?)y-9_r@koPmie;`NQRIOank|)2g{ZKpDHinO#*^D7Eo#+Z`>>R zW-WK)85PgM3dWB~*@7>%K$eM75&l7C>SKJC;`0@h*HK^wjS%0S{$%dCKTy0)VUjd5$v=c_zs+A!ltX@2OdMh$L|Cm!74tDI^#kyN)O)$ zn74?vW)CVwDpC7U*H*d={cRN55^<{GU;Gl_2hM2?`S`S+)F1W@9}5aE>IzZ;>d<^X z#AufzouW&?~`o5as0 zSkom_uQ1%s!!oAc#AmniIrT?;zKZf|l($hPg`-nXP{Ey915|_~u-zTO%@s$W<>NbI zrO?+b#R(YaE0`<6$JPQ4rIh2d2Bn^TStv)bq!!^lNFnb{{ef+yPpso?W2gBI@C$q| z(SDkxAj=5vY@DUwUMbwY6fao+A*orgiCsdF&rzKRV95k7Czy=+5WaABgd_ zfJxd7|2Dx7d~&!;mHj|{uqV-G82c4PyaDT$xW2aork8~_oROGTc>fp!`#e|Ng!zQA z283^#yS9hSfJdE=IE*ncKdOg)7^HQRkmCWHRi=0~etQe$HO%MF{CimVE2K;#-B7~+ zgAL{Q|HFCo5j_)|1wCME69@6xpyF)_KAl2DBpmkPd!KMFiWOx!N->HDr2(Y{Wr)7R z4|6k{z@BIlEaC@(O$wo)KXx92x>V_c|) zy~2p!X^kT&BPd-cZj=IE=-H=%D;a%tf*xIneTYK4j=c`tpkR!1MS@?(zh6S3c^U;b zaI+HUu28arC!&bAK{+G*f*_X=1;!M+~w^#z@BMjE%NyZMWL~4oyIBx7uxX zr`=<(x3}2a?S1y0_D|Wbwclg^iNopG=oFoq&H`t#)8Mo^ZO(vm$a$jk6!$NtEcEUN z4u>5%^ew_(z)>uk0moC~ZzVy>l5zouCk}@IIPx+IGfFZlGU_r~Gx{=Ofa3()<$&V@ zz)@^B+e__sz)@#!R^d3$ez^)qOogKea9HASYyljFQ&VCdn*{#gl)--|(I5HaDezx; zLS842%d6$CWA7b1G@)QI*u}@-Vw%jJ%sKX_V{g$fZ~Ot}D{tIH-|=nl z8&|w>nRKU2-KF-^x7L8Lx|PQcpPNv;K!nzeD`_e`=3mxj2SJ&!c|>cllDW_GI=?P?*{N zW9;YbA<~-J_i&r+gSa1iANwhLnLUB~91pNxvY)Xh*{kdjdyV}Edk(v638Gu{upZfA z!}TEYC^7fd z{f)iH-e(`MXW0v)AZD_0yfx%4aj}>Me`gN+9d`F+>|?ym=GW{+QDT>}b!Gd{1~l_&&1>kKkNBE*ub^0EPaw@S^Y==0Hr`pM*aPe-Zvuc$d9` zTyKftjXErgUdX`A@O3{3>&ip_udXwJa;qu>@c$>7mziW*ib7?#lwD{^UNX}u6zQ~` zX$xH_-DuS#=}bD4Hch6Pq^0bOfNTN+1*EJ(LGWPp0HwtPE{Muf(4(>)4pKq%xNlV~ zW&G}vnVhP5C%O0C<-h;^@4wvte=qMzt2~Z$ZzGbro&S41#a)5lCW7;{oTo=}#rj$H z_CFw|_8j*R{gD08k7T^OfQ^4qj^zHlqhyC1Bd^H$dK7UH^B%KTk?YrxsMp!w94!~< zF_Mutd5Y6pdMsDJ-vY$8kT4syT>MQ z%2jfWTr1bh4RWL0BsX)BB%@hv_1;BkFIx9L{y^4!i7DZi^f*Z1``ktcQN@-4CJj0CjGMx!NTT>X`Y`MSKq7Z3Y< z1Rgj4urO_+aK?9hJ_g5_EA^(lNe;q3xO^Z7FhiFg&7Pv&<)KrnuJZZ#2u!Hbs_T6D zq3q)?h3CpL0LN9NAbrv=RpcvVRn2!ClsH? z?3IO41?C{Kc_K$2kWGsk8gC-K%1Gyll$E3xCghiy~zc$Zr5bo_6(-j~mXN zNqHYVijt#e2AGqG1E=U9E<$sk>lsJMH8CTRvl$@j*gap zaeLwzIUX)P0bTea^1VYp#&d@E)BTaT3G6o}>L=txZbsl)LC`iWE76CCAW=y3Wup?dDGBSvp%! z)6;d1&eeH3U(e75L}VB0BI3PEbSb)enJ(AQ=x6nFJc;7-dbZ|th4yH#=5?j^X}=cG zysKD^)$nFfO1er{YmxYFH*52euF;Z;%+xZPYAve_ujqiT)rtQ#ERUL#BNTD=ba_nv-9mg@D~bAO|p#lIgeWPf#uepzqQoAnmmsJC)I;c~rA zZ|7;ncjzX))7p^V%XYm>@0QQ$J$kRakDj{+J8`f45nXtnyozPKUmuWP>1KUUzNrrx z8!UHVH@}YUdlcKeg=fxw3)}pd)ow<&Z9}^~rQgQ-J&mLTm3w? z`$c^T+xaqf`%ZQlKhd8WyNE{o1@`?ltmPZ}CYJpzZ2Q|-q5ZHzV~4Hc!Ey*!1m4k| z`YU}`-_u{CM}MQg<(cHa<8GyYU?X-TI;KLBkJW zr;WCc@>)^e5E6-Vy}Konz-G5%YsYZMj?uNoGPYuurebZ+#!5HKbKJj`K+Br_!edy> zXR(S;vv2qsT6&aRisjuG8-6HO@)0ciSFw`!VNFlPmVTa{#1Yu|E3hcvmn$P<(7b=b zo;-4p8k=>QY>SMId?Io{yjCitQk|)I=bBtkrCbU+ zS5)%r^6}1cU%8ZDot)lNsPxpR@)YQ0&deXM51I9X_)?KBtYew5X>u?ZKQ}Ppz8w zr_+KtcF15}Lus}xnCCE_@4?QuU`NgGua)|8mD-wOu2v1sZ0OR~9-QgA7$n1V7%a54 z$%T7i5T-la(CuNcsIf<9u-Hvyu^)4>9kXe1rBLb{wYYKQ_+mf3r6a(DrG1s$x_q$I z4%@P{w~(*o2MdE{uyj{PyH7ik%NqJDbA6WEK8fYSlxD#y&MIb z@vJk?Wf^i0Z)nn}4)GbuM}Chca$T{aG~*8v%)1G>AN?jyBS zAhqpDEfq-ZxTJRWq!tdT9iP;WPwHl$npRKUxT$FtPMDfxsZDC(ky?1979OdEM{41b zS~y{^ffK^}kS%d@sk3yR0G6HAagNOX0+Qey8GnbAFGksMOY zRZGM@jNfHy&98Y*A|K$Id_*5J=dqtf$1#qHZ2Hg8PTK4?CqtWtw$w}Q`3_shTLy>z z@?UkP*G?dremhOO#?Q$4(3YVcu4ZTl$4>sgYCm{}{xe*^lm8TL2AXLf4sACrhKSYK zw;b*>^enk8%vWf&*LbFdZAB$@=Bdj~!yEr+)A zH8UH=+4eom)|qlB#4JodgT*G=x;p5_xxuy$!O@3?ru6@OrZkrCMKe>!KNN{^n6)yV zMXQX%Hy(}W8gicH*q^vz2Rt#A=+lAtZ?oB%FX0$(qXkFc1D5fn*K!<(FF#03VFSnU zcxmV1FJHtlfj$0Jc=*?Fgf?!JVQ+sk(XU%M+S%9NPE_I!JgpAd%yFtbg!eF&DCAc5 z^UvUu&nF7`JU-jYc+<<-*S|%?ZztZu*~B7u5exViN0n$~gg6!vNg`RqB=H&#)`N)& z;&~Ib8?WPuyB&?ceIcIqu|(M>5JkHfpE|@h%<3sb%ckm7xfXBvG`SA%c!6xhFJ6d` zw?vo8CN1LS-h(e&k$ds-o|OCX>7J2?@#20gj~G9WyHsDni+j}gR`LyetKImCdm<6} z7T#1do=pUwI0}tpP}n>J#N1zN-kK9qX6PFw8e`sXYUrD=^i4wFHF#Pjj)bLh!csXP zHo6`-hSpKJgd+--ub{+GIR=%lr?%gA#6+ybG}*OmveDK!vU3$J&AK+( zbxjcIxdBX!3?-}#HQAMpAVYV6m09n&UGJn_?-sk>5xd?AD`AR+J;W*+FFk_q{sj50 z98sk08S>A1K6suP8$K9i{pjWfK2XaCqb(oshI%9~YB?aV9MB90jD_Mx{+f}$!}$Fq zQW#ewg=%>sszwT%J!iBLjSU*O!SO-V@>9kY@hvyvTyW+QfUoM^RFTSMG2YVGEDHqNVMytSUpo|Z}s#97aTO^v-BwxM8K z03TCtqTLa4``O1JbL~>>wZ +#include #include #include @@ -25,55 +26,117 @@ #define SETTING_MENU_FONTSCALE "Font Scale" #define SETTING_MENU_TOGGLE_SHADERS_KEY "Toggle Effects Key" +namespace ImGui +{ + void Spacing(std::uint32_t a_numSpaces) + { + for (std::uint32_t i = 0; i < a_numSpaces; i++) { + Spacing(); + } + } + + ImVec2 GetNativeViewportSizeScaled(float scale) + { + const auto Size = GetMainViewport()->Size; + return { Size.x * scale, Size.y * scale }; + } +} + void SetupImGuiStyle() { auto& style = ImGui::GetStyle(); auto& colors = style.Colors; - // Theme from https://github.com/ArranzCNL/ImprovedCameraSE-NG - - style.WindowTitleAlign = ImVec2(0.5, 0.5); - style.FramePadding = ImVec2(4, 4); - - // Rounded slider grabber - style.GrabRounding = 12.0f; - - // Window - colors[ImGuiCol_WindowBg] = ImVec4{ 0.118f, 0.118f, 0.118f, 0.784f }; - colors[ImGuiCol_ResizeGrip] = ImVec4{ 0.2f, 0.2f, 0.2f, 0.5f }; - colors[ImGuiCol_ResizeGripHovered] = ImVec4{ 0.3f, 0.3f, 0.3f, 0.75f }; - colors[ImGuiCol_ResizeGripActive] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - - // Header - colors[ImGuiCol_Header] = ImVec4{ 0.2f, 0.2f, 0.2f, 1.0f }; - colors[ImGuiCol_HeaderHovered] = ImVec4{ 0.3f, 0.3f, 0.3f, 1.0f }; - colors[ImGuiCol_HeaderActive] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - - // Title - colors[ImGuiCol_TitleBg] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - colors[ImGuiCol_TitleBgActive] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - colors[ImGuiCol_TitleBgCollapsed] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - - // Frame Background - colors[ImGuiCol_FrameBg] = ImVec4{ 0.2f, 0.2f, 0.2f, 1.0f }; - colors[ImGuiCol_FrameBgHovered] = ImVec4{ 0.3f, 0.3f, 0.3f, 1.0f }; - colors[ImGuiCol_FrameBgActive] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - - // Button - colors[ImGuiCol_Button] = ImVec4{ 0.2f, 0.2f, 0.2f, 1.0f }; - colors[ImGuiCol_ButtonHovered] = ImVec4{ 0.3f, 0.3f, 0.3f, 1.0f }; - colors[ImGuiCol_ButtonActive] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - - // Tab - colors[ImGuiCol_Tab] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - colors[ImGuiCol_TabHovered] = ImVec4{ 0.38f, 0.38f, 0.38f, 1.0f }; - colors[ImGuiCol_TabActive] = ImVec4{ 0.28f, 0.28f, 0.28f, 1.0f }; - colors[ImGuiCol_TabUnfocused] = ImVec4{ 0.15f, 0.15f, 0.15f, 1.0f }; - colors[ImGuiCol_TabUnfocusedActive] = ImVec4{ 0.2f, 0.2f, 0.2f, 1.0f }; + // Theme based on https://github.com/powerof3/DialogueHistory + + float bgAlpha{ 0.68f }; + float disabledAlpha{ 0.30f }; + float hovoredAlpha{ 0.1f }; + + ImVec4 background{ 0.0f, 0.0f, 0.0f, bgAlpha }; + + ImVec4 border{ 0.569f, 0.545f, 0.506f, bgAlpha }; + ImVec4 resizeGripHovered = border; + resizeGripHovered.w = hovoredAlpha; + float borderSize{ 3.0f }; + + ImVec4 text{ 1.0f, 1.0f, 1.0f, 1.0f }; + ImVec4 textDisabled{ 1.0f, 1.0f, 1.0f, disabledAlpha }; + + ImVec4 header{ 1.0f, 1.0f, 1.0f, 0.15f }; + ImVec4 headerHovered = header; + headerHovered.w = hovoredAlpha; + + ImVec4 separator{ 0.569f, 0.545f, 0.506f, bgAlpha }; + + ImVec4 tabHovered{ 0.2f, 0.2f, 0.2f, 1.0f }; + + ImVec4 frameBG{ 0.0f, 0.0f, 0.0f, bgAlpha }; + ImVec4 frameBGHovored = frameBG; + frameBGHovored.w = hovoredAlpha; + float frameBorderSize{ 1.5f }; + + ImVec4 sliderGrab{ 1.0f, 1.0f, 1.0f, 0.245f }; + ImVec4 sliderGrabActive{ 1.0f, 1.0f, 1.0f, 0.531f }; + + ImVec4 scrollbarGrab{ 0.31f, 0.31f, 0.31f, 1.0f }; + ImVec4 scrollbarGrabHovered{ 0.41f, 0.41f, 0.41f, 1.0f }; + ImVec4 scrollbarGrabActive{ 0.51f, 0.51f, 0.51f, 1.0f }; + + style.WindowBorderSize = borderSize; + style.ChildBorderSize = borderSize; + style.FrameBorderSize = frameBorderSize; + style.IndentSpacing = 8.0f; + style.FramePadding = ImVec2(4.0f, 4.0f); + style.CellPadding.x = 16.f; + + colors[ImGuiCol_WindowBg] = background; + colors[ImGuiCol_ChildBg] = background; + colors[ImGuiCol_ScrollbarBg] = ImVec4(); + colors[ImGuiCol_TableHeaderBg] = ImVec4(); + colors[ImGuiCol_TableRowBg] = ImVec4(); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(); + + colors[ImGuiCol_Border] = border; + colors[ImGuiCol_Separator] = separator; + colors[ImGuiCol_ResizeGrip] = border; + colors[ImGuiCol_ResizeGripHovered] = resizeGripHovered; + colors[ImGuiCol_ResizeGripActive] = colors[ImGuiCol_ResizeGripHovered]; + + colors[ImGuiCol_Text] = text; + colors[ImGuiCol_TextDisabled] = textDisabled; + + colors[ImGuiCol_FrameBg] = frameBG; + colors[ImGuiCol_FrameBgHovered] = colors[ImGuiCol_FrameBg]; + colors[ImGuiCol_FrameBgActive] = colors[ImGuiCol_FrameBg]; + + colors[ImGuiCol_SliderGrab] = sliderGrab; + colors[ImGuiCol_SliderGrabActive] = sliderGrabActive; + + colors[ImGuiCol_Header] = header; + colors[ImGuiCol_HeaderActive] = colors[ImGuiCol_Header]; + colors[ImGuiCol_HeaderHovered] = headerHovered; + + colors[ImGuiCol_Button] = ImVec4(); + colors[ImGuiCol_ButtonHovered] = headerHovered; + colors[ImGuiCol_ButtonActive] = ImVec4(); + + colors[ImGuiCol_ScrollbarGrab] = scrollbarGrab; + colors[ImGuiCol_ScrollbarGrabHovered] = scrollbarGrabHovered; + colors[ImGuiCol_ScrollbarGrabActive] = scrollbarGrabActive; + + colors[ImGuiCol_Tab] = ImVec4(); + colors[ImGuiCol_TabHovered] = tabHovered; + colors[ImGuiCol_TabActive] = colors[ImGuiCol_TabHovered]; + colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_Tab]; + colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_TabHovered]; + + colors[ImGuiCol_CheckMark] = text; + + colors[ImGuiCol_NavHighlight] = ImVec4(); } bool IsEnabled = false; -ImVec4 TextColor = ImVec4{ 1.0f, 1.0f, 1.0f, 1.0f }; Menu::~Menu() { @@ -121,7 +184,10 @@ void Menu::Init(IDXGISwapChain* swapchain, ID3D11Device* device, ID3D11DeviceCon imgui_io.ConfigFlags = ImGuiConfigFlags_NavEnableKeyboard | ImGuiConfigFlags_DockingEnable; imgui_io.BackendFlags = ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_RendererHasVtxOffset; - imgui_io.Fonts->AddFontFromFileTTF("Data\\Interface\\CommunityShaders\\Fonts\\Atkinson-Hyperlegible-Regular-102.ttf", 24); + ImFontConfig font_config; + font_config.GlyphExtraSpacing.x = -1.5; + + imgui_io.Fonts->AddFontFromFileTTF("Data\\Interface\\CommunityShaders\\Fonts\\Jost-Regular.ttf", 30, &font_config); DXGI_SWAP_CHAIN_DESC desc; swapchain->GetDesc(&desc); @@ -145,10 +211,22 @@ void Menu::DrawSettings() ImGui::DockSpaceOverViewport(NULL, ImGuiDockNodeFlags_PassthruCentralNode); - ImGui::SetNextWindowSize({ 1000, 1000 }, ImGuiCond_FirstUseEver); - ImGui::SetNextWindowPos({ 0, 0 }, ImGuiCond_FirstUseEver); - if (ImGui::Begin(std::format("Skyrim Community Shaders {}", Plugin::VERSION.string(".")).c_str(), &IsEnabled)) { - ImGui::PushStyleColor(ImGuiCol_Text, TextColor); + ImGui::SetNextWindowPos(ImGui::GetNativeViewportSizeScaled(0.5f), ImGuiCond_FirstUseEver, ImVec2(0.5f, 0.5f)); + ImGui::SetNextWindowSize(ImGui::GetNativeViewportSizeScaled(0.8f), ImGuiCond_FirstUseEver); + + ImGui::Begin("##Main", &IsEnabled, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar); + { + ImGui::Spacing(2); + ImGui::TextUnformatted(std::format("Skyrim Community Shaders {}", Plugin::VERSION.string(".")).c_str()); + ImGui::SameLine(ImGui::GetWindowWidth() - 70); + if (ImGui::Button("X", ImVec2(50, 0))) { + IsEnabled = false; + } + + ImGui::Spacing(2); + ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal, 3.0f); + ImGui::Spacing(2); + auto& shaderCache = SIE::ShaderCache::Instance(); if (ImGui::BeginTable("##LeButtons", 4, ImGuiTableFlags_SizingStretchSame)) { @@ -209,11 +287,13 @@ void Menu::DrawSettings() ImGui::EndTable(); } - ImGui::Separator(); + ImGui::Spacing(2); + ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal, 3.0f); + ImGui::Spacing(2); - if (ImGui::BeginTable("Menus Table", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_Resizable)) { - ImGui::TableSetupColumn("##ListOfMenus", 0, 3); - ImGui::TableSetupColumn("##MenuConfig", 0, 7); + if (ImGui::BeginTable("Menus Table", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersInnerV)) { + ImGui::TableSetupColumn("##ListOfMenus", 0, 2); + ImGui::TableSetupColumn("##MenuConfig", 0, 8); static size_t selectedMenu = 0; @@ -235,7 +315,7 @@ void Menu::DrawSettings() } void operator()(const std::string& label) { - ImGui::Text(label.c_str()); + ImGui::SeparatorText(label.c_str()); } void operator()(Feature* feat) { @@ -256,7 +336,11 @@ void Menu::DrawSettings() { void operator()(const BuiltInMenu& menu) { + ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4()); if (ImGui::BeginChild("##FeatureConfigFrame", { 0, 0 }, true)) { + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); menu.func(); } ImGui::EndChild(); @@ -276,8 +360,11 @@ void Menu::DrawSettings() "Restores the feature's settings back to their default values. " "You will still need to Save Settings to make these changes permanent. "); } - + ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4()); if (ImGui::BeginChild("##FeatureConfigFrame", { 0, 0 }, true)) { + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); feat->DrawSettings(); } ImGui::EndChild(); @@ -296,19 +383,19 @@ void Menu::DrawSettings() BuiltInMenu{ " True PBR ", []() { TruePBR::GetSingleton()->DrawSettings(); } }, BuiltInMenu{ " Streamline ", []() { Streamline::GetSingleton()->DrawSettings(); } }, BuiltInMenu{ " Upscaling ", []() { Upscaling::GetSingleton()->DrawSettings(); } }, - "-----Features-----"s + "Features"s }; std::ranges::copy(sortedList, std::back_inserter(menuList)); ImGui::TableNextColumn(); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4()); if (ImGui::BeginListBox("##MenusList", { -FLT_MIN, -FLT_MIN })) { - ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.15f, 0.15f, 0.15f, 1.0f)); // Selected feature header color - + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); for (size_t i = 0; i < menuList.size(); i++) { std::visit(ListMenuVisitor{ i }, menuList[i]); } - - ImGui::PopStyleColor(); ImGui::EndListBox(); } @@ -322,10 +409,9 @@ void Menu::DrawSettings() ImGui::EndTable(); } - ImGui::PopStyleColor(1); } - ImGui::End(); + ImGuiStyle& style = ImGui::GetStyle(); style = oldStyle; @@ -642,7 +728,6 @@ void Menu::DrawOverlay() ImGui::End(); } else if (failed) { - TextColor = ImVec4{ 1.0f, 0.0f, 0.0f, 1.0f }; if (!hide) { ImGui::SetNextWindowBgAlpha(1); ImGui::SetNextWindowPos(ImVec2(10, 10)); @@ -651,12 +736,9 @@ void Menu::DrawOverlay() return; } - ImGui::TextColored(TextColor, "ERROR: %d shaders failed to compile. Check installation and CommunityShaders.log", failed, totalShaders); + ImGui::TextColored(ImVec4{ 1.0f, 0.0f, 0.0f, 1.0f }, "ERROR: %d shaders failed to compile. Check installation and CommunityShaders.log", failed, totalShaders); ImGui::End(); } - } else { - // Done compiling with no failures - TextColor = ImVec4{ 1.0f, 1.0f, 1.0f, 1.0f }; } if (IsEnabled) {