From 993c69ea0a95e356608df0b128fcc2448a4dd403 Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Sat, 27 Jan 2024 15:58:16 +0100 Subject: [PATCH] Compute-based pixel counting and basic ui --- .../fonts/Bangers-Regular/Bangers-Regular.ttf | Bin 0 -> 92468 bytes .../Bangers-Regular.ttf.import | 33 ++++ assets/fonts/Bangers-Regular/OFL.txt | 93 +++++++++++ assets/fonts/Press_Start_2P/OFL.txt | 93 +++++++++++ .../Press_Start_2P/PressStart2P-Regular.ttf | Bin 0 -> 116008 bytes .../PressStart2P-Regular.ttf.import | 33 ++++ assets/fonts/Titan_One/OFL.txt | 94 +++++++++++ assets/fonts/Titan_One/TitanOne-Regular.ttf | Bin 0 -> 52708 bytes .../Titan_One/TitanOne-Regular.ttf.import | 33 ++++ entities/Player.gd | 11 +- entities/Player.tscn | 4 +- materials/shader/PixelCountCompute.glsl | 31 ++++ .../shader/PixelCountCompute.glsl.import | 14 ++ materials/shader/WorldColoring.gdshader | 3 +- project.godot | 8 +- scenes/Game.tscn | 73 ++++++-- scenes/GameUI.gd | 22 +++ scenes/PixelCountComputeShader.gd | 156 ++++++++++++++++++ scenes/PixelCountComputeShader.tscn | 7 + scenes/World.gd | 58 ++++++- scenes/World.tscn | 35 +++- 21 files changed, 763 insertions(+), 38 deletions(-) create mode 100644 assets/fonts/Bangers-Regular/Bangers-Regular.ttf create mode 100644 assets/fonts/Bangers-Regular/Bangers-Regular.ttf.import create mode 100644 assets/fonts/Bangers-Regular/OFL.txt create mode 100644 assets/fonts/Press_Start_2P/OFL.txt create mode 100644 assets/fonts/Press_Start_2P/PressStart2P-Regular.ttf create mode 100644 assets/fonts/Press_Start_2P/PressStart2P-Regular.ttf.import create mode 100644 assets/fonts/Titan_One/OFL.txt create mode 100644 assets/fonts/Titan_One/TitanOne-Regular.ttf create mode 100644 assets/fonts/Titan_One/TitanOne-Regular.ttf.import create mode 100644 materials/shader/PixelCountCompute.glsl create mode 100644 materials/shader/PixelCountCompute.glsl.import create mode 100644 scenes/GameUI.gd create mode 100644 scenes/PixelCountComputeShader.gd create mode 100644 scenes/PixelCountComputeShader.tscn diff --git a/assets/fonts/Bangers-Regular/Bangers-Regular.ttf b/assets/fonts/Bangers-Regular/Bangers-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..438c449990963bb12eba0a82a9d9f54fb46822b5 GIT binary patch literal 92468 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

E1VpAG@c$j+!(rgwc?Cgdtqk$f!dwBqmx{2 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Bangers-Regular/Bangers-Regular.ttf.import b/assets/fonts/Bangers-Regular/Bangers-Regular.ttf.import new file mode 100644 index 0000000..9139272 --- /dev/null +++ b/assets/fonts/Bangers-Regular/Bangers-Regular.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bf6q51e8x2s1h" +path="res://.godot/imported/Bangers-Regular.ttf-dc56918042b67b1a4b9d0d682d0434d7.fontdata" + +[deps] + +source_file="res://assets/fonts/Bangers-Regular/Bangers-Regular.ttf" +dest_files=["res://.godot/imported/Bangers-Regular.ttf-dc56918042b67b1a4b9d0d682d0434d7.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Bangers-Regular/OFL.txt b/assets/fonts/Bangers-Regular/OFL.txt new file mode 100644 index 0000000..f5ff6e5 --- /dev/null +++ b/assets/fonts/Bangers-Regular/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2010 The Bangers Project Authors (https://github.com/googlefonts/bangers) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/Press_Start_2P/OFL.txt b/assets/fonts/Press_Start_2P/OFL.txt new file mode 100644 index 0000000..ea3079c --- /dev/null +++ b/assets/fonts/Press_Start_2P/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2012 The Press Start 2P Project Authors (cody@zone38.net), with Reserved Font Name "Press Start 2P". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/Press_Start_2P/PressStart2P-Regular.ttf b/assets/fonts/Press_Start_2P/PressStart2P-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2442affbf6570d23c0b2b270cca8d49535df27bf GIT binary patch literal 116008 zcmeFa37k~bl?Qz9d$0DYUTB)F1*&Oqqe1AV1r)XD1!NJCMQOE>1{!GDT4>w?s4*^} zaf?P{HWM{2F|lxoOI$OPWU@?>nPjq>iOFOVlT4gU#%xT~@Bcsd-l|tcH;c)9zu)&w z3cBi5z4z`t_uR9ebMI4HDOH8HK&iRy9do?B-cF_TQ2aVpb2$H#b$#nMU%d88 zw3q#bo=NDV1BO^m|^}(9^v(zGLpc;ykZAaRYt` z9*C~P_l5XAe#7SeOFvb;>{)>J4@xDE+O%~|_jTWX?I9e0NU6y9&E1#w1;=H+fa@D^ zeRfOt=AN$mu4q##`ZVDGY2ViE{pY{u`hQev5?~y1X5Y4+zVD3u_Adc%9M|ttTIsjn zR+acviV*VUDeYbAy-WEx#_!&(Y6i}YS23K)sk77#`2Fe3Fy71a{%gF+f9=oTmSeUQ zdU?Be4ci*F>v!i~P&w;&$~Sj>>zM5CdEvJ%{Z3g8y)M6H0nvh|)jup* zu}|xpI`jIOxQeSaefw0b^~p`kW{nTj@jT8YyOJHrNy*`fAZ~x?jh+>q866jqA5yK) z55Kbd%G8xn(o+JLRJJ~kzRf@R#aHe7#_Q|PT9MCPzha-iwte5x{Pt}8N~MF`^=p>l zN7demS1#EdpBJARuZsog9*O+ zvN)$ev!s&<<}3x;tW-nfw$}zUCGT6;Y*O#ux^3+ib$R%G`;NZtsz3Y=Ftl(JAqJt~8);kv zQoa*T;Uv5(mC`@e_vrI=yN-j3KB6vG8`Mc^gq+hDuZOV(>JRFV^2fUaHBY@uy=>cw z zLez*~hndkpYWdzs{Xh7nLPfop`Q}CC^G|GF|55M9ryC7too)UR_dqD(&%wr{p=vU& z>)XeWg84gpO0VcbWY?9XihFEJknIufUN4rS{`r zAL#W2{M)Y9sBNkj-}`Yq8GpTM6F#@%*Y!AmrkbM`s%5yV7w5A0wpDGxwOO?kN9%BO ziR#9+J^003u?e4R@O=xe?@?><`wkqh#ql;A_oF3VyA(9G5T9qFXI>j_d0|NljW~C< z+)dcndsa;ag#62fAS>v{FLJK z67+Bhpu1e4?NQCp&65Fl4|+I3wc%G{;|%n;Mb0f2{A~xmmf{LxvtKo-#cGmTg6q}; ze}sP90a$28t5f7(u?1q*wUL!pvSqCl?>ZTIvKrj4i61ODMZD)4(ylX>{FMa z-Cm4=7$Q7VFmFvbB1Lg74%UJ>yH#C?E7!>Vvw;iF9I2Dkcr1P=HZN1T0kM4?cs@Me zgq~En4OC%hvq;a2faA^hHLJ!Q6smFHq4D92c_rAK^-FJ~B0!I%n!5Q-9sm(6p!N8_m_tXEy)+wDHp}pZ2wu<616n`NN5) zpZLw`vFUTBKR83rxOB!>X8dtx^UVI4pPKotlZKqsb<({j{p{ppPrmBpXJ-wWwSLyU zvwnTbxu^X4)U!|Bb?URH)tol}v@1`0=Cq&ZDsvlh59D5(J$m-lv!899(0WDdKepAk z-QJ#QKd1dm9l4HcI-c(M&728ymdv?h&RcVHbFY~D=IK|Q{_S~7=iNK+i}U_#e&hVU z`JbBqFAHiHtX=TPg5NBhw(zQjpFQK)Gp;-1pBB|E>Rj~rnayYRp83q;>c#68fAOsO zXZ_QXGnQPlRhd1vQW&mDE{taC3v_w(n~oOj20pF8h2=Z`#p(fOC3pFjUsUE{h| zb$z(&H!DwHdC$r(Ur>F)DHm+J;OSN4R&}qsulwZgtGoYW^^DbbtvPAUooilSyJ78* zda8R)?zz3^rFE%w7q0urx*x2MuWwp^&$mOwlli(terRR{Qj=VyFR!( zvb%ftt-C+F`|T?xUa{kfZ(SL^GI!;rSAO)$KV3EPsw=Mg;kzfld*i#me)Y*$Uw`!v z-!t_+x4-8{*G#+Swrjq3ZT8xWuKmQdKfP}9br)av)9a^QfA{sTUjO!zBl^bW$!)zy&t}5)J>ajdibWF-#p>w z9XJ2zmMynDd29WxOK!dA)*s$B@wSb({qlVc?|b}x|9bn}+dp^v@9&s)$LH_(^ZT3M zzw!N_yfbm<^gH|ReCDp1clF=(^j*LEz{wxj^MRk-ebU_@{b2Hg8$S5e56%0~XFl}P z51;qpYd#YF$h$uBqmR~q^p212zvt|GzI4xTKQ`fG+dh{6c*Vy*e(&-3e*V7neeb&O z{rA0a-)r|L@1K7E`up#^|KIO_^Anps@skH)57a-f^nra3eEq@d2bVl}@q>3i_|`+K zAKLZMT@O9}(AOXO)x+B!{?jMV`Q($I{KX@qA6fFq_DA0T$WxE}^QQv*JLXfnKK1IS zTR;8LPrvo(X^-X~-Jd@te^LJFeR^MFU-Q0u_r3C%|Jbz09)G;)@fD9>@%Yn^|KW+5 zPjo(U+Y`?`@xv#6`{d{+r$4#z$vZ!D%x9ke%qyRH^QqBKo%+=KpUOY=m8X9GwEy(P zr`JAx-P4ag{mrNMKQr-}3!ZuQ*}2a?_1STsed@VY&+UBf`RBg#y!U+L^J|~~((`|O zVZ;k_UbyImyI*+rh5vl9^2JkL-0gBs% z{^rYXeQxIGx<0oBGLi-&z0;wzKIAiqzJbrj)RnN$nsAhXHk_%h(5LHeeTBZwtMi`o zzUY0$`=PJ>qx}~Da(}nK*T2!f#s8T9ke~Ozuiq9hs1=&5p{B$&Sk&ot=_BDchdy&pwiUH2XyM>Fo3M!|KP? zzi*s3E;_DqT=lrxaihkK88>m<>El+7>zVM_gwITPZo*3wzI=4_=v7CrIeOjE7yg(2 zA(^DP6y zyfy@LL}2a#%nC3wYM|f#9n9D-3haD)0N&P1=G)tszP;@2IdAQJ>v5&tnvK8gTVwHF z&$EC2Po>^G&Rln}_n*}A?2mu(lVg7TpFe*2$G80WMtr;W$JhLL_m405@fk|Jy7blg zueQEA`_+lB&U|&stK(nwfAsH4z4FOd9(?8ASMGV`wpY%7#eYS=qJHpZ_05Ui$Qwc_ zN_`rQepxT`?(_Z`LN7J z+1`cTaM%M`FX7GhD!lPtjW^QEcq6>IUb{EP8|wAKXQ+gSI}ASDcr`&C4=Zm5=xLT} zg*7%$ErXSJjyg}Rf>lHNiFVE<-e@oBjqxr9wOt4Q>soc4dat?_p5BMl$Ka_viWt!o z>RI(!cx_)*UsGRK-&EgM|EhkWeyRRL{aXDOIO`%0{)gA>HF?$EG;fyI;+^Jg^EP?c zc$?K9yraD{yb0bGZ;#jK%@_aXN^hCB(Mx$(dm28^F<#7zdU3B7K2HQ5aR%N}8s1%v zs#kUJWXHm@I6*AC;p%j?NX>_BzeJtkwZgLQg-vDbzvb$?;QgIyw|bAdLS3z{QG3;0 z>Na(UdcS&DeL_8`9#S{KpZ= zqVR4+53YxFxk1&c8{wtyfuDA>8mVr9{q_NMlzJaH^-k5G?pCAK?dlkK=|`&%tK-x? zuo^!KyYOB$5uVy~&{~Un1U&tKI#GQJ_W1pNBu1 zpN6;ajA~cU!Ebm0mhhIvqd=d8dSJVpi4Rx;iXIR(&q|R60QWvQ2 zAXf5i)usLgUdSu3G=Biw|24Hy{X2Z9S7CSl99Hg6Vdwu$U8H^mEB8NPps+Z~I`fS~)&(&Re zrM^I~(yR3ry;WbN`}8)wU0>(hPt!N)7Jak+ zl>W4yu5Z;d^lf^kexE)`->y&Acj#IA{rVJrr#@Amraz!_`fh!fo~=KqTlI(ZqdKqK z^oJ3@`H1e&AJuaZ&6%q|22J#FJx|{Y*?ym1pzqfU^(XWh`T@O2Kd8^t59!7FVSSeV zq+X&Q(I@I#ym4N=*WgX`8olGa?Owl^_D=Ptd*^v8yiV_2Z=QEL<9L)9`27FU-!2O; zKM(a+KCXeTFTdvh&F|&#{3U(=HQV}2;27*)!Z+AC_j~ym!rysK_`5rH_qy}$JI|N@ z=Fa^!K3)IrbD%bHPG2$r+yh-Z*l%tegPkAj_krMYzrE8o2kPsu)s};8pgsor?Qr^a zZHBLPzYWypk^B~Jv;02S$HA^Czvocj|5|MwE^Mwp_jxe*25a+h?mbw$Ja@Ql40hdM zznAyR>kju?ckkieb0qB!cI{xlJ6J-WB6IltaPHZU>%xDbc1q-R_!`%)`;GVT*xk$X z{O+!E=fl63pXW6^KhQnlbFNSK>8>yT48!7%!|jBx=dt@9zNWkncP{+N4pT z2Z9msajr{rjDrof-J2)j?<4p_p6tz|2q*Ko{Kw2LY-!2wmVT2nyYi|rn^((MbaZC3 zNOM=5wICl|dhUw+w7UGUovYSm_by+N_a=0kr1zSJ)phmtdDWR$Z4K>@!B1{m)jBD! z8}r#!>n7#B#_ZZ`{-wqF;OKK7J60##I@WaLqa7>i^Zta+CFiZEZ>X=^yCR!kycj>_ zI_t9e89bWN*_qvEuI^r&KNdgPZ`u45o}a=iUs}8(3uyLsXY3p4i#hkXMUW^mKMk%KMGkj%+@d&<)5UZHrgrBMq(jXhSQ;fn5HoN%^3$ z0dQs4?u)E$&GHN(t}_tuJs+&$;b8u4w42 z@66_NOIP4r9fxN7pOlX@=3{LWA442UFcrnuhSmmPyrH!_@2y^!*J}VpK63n|e5^4` zP*ZJdo(|M%TmoQot2%kfs&)Z2-uPH7rP?}LkFPJ_KG9e@7fI8Ko(K>C`-D~5j=c@t zoEO2Dsv}PG**XB}pv3Gnbhn!>QiI%{ACJ3mb75%Vo6;nqhStYYNgtD4*HGVieEp<+ zrg5L=b>!D}w@=DfG-3eRY(CvKpX0(oLu+R~!*5IQErV~9@|9?&N>Gvo2G#)Vd_~); z?A}$`dl<*JI|eoIJZ}Lj z@N6eWG8gdA#jmAPHOK_+Q>vx`C~nKEQy+u(E7VZah?t4jv1~=YvY|EGkxzm6k_{lZ z*6b>D|73NwMtGyOb?>TuL!uM&dnVS61Db|nY&8=nn@$;z0eQ|z{ZrqpP=W&g|g28(}x(XO>$WG4dE;7iZ{PCfa z!wM%aGAAd7P99x2xy_s$)2Q;9iSJ;1V==xlfGdmf@v|P|M7USb*V`Fxfu+OAMptX8cwheQ;inP#;&wL|kb#h~V(!~5EaN!AH zfVrU50okyjdqx8#;z6$f8BWSiDNL;%mOtV6eGy&Tu>yjO6F4=DnFCKZHD+4`-ez2< zI}Vfv5HbUT$KTbkC+O*`_EQ^X>}%4s9NaV@01yv&&nj?5_l!yTmd44$XHCkVc&JN3 z!E12&bj*nwHX%DXJC~dfT+Z9OcW%R6NSYN;5s<792PbM>I}|9L0TDGUUxmv8NX-dy zSw7J=v1jk(hHQ4$UbHu}^pfmk(^fvfO}H|fUqzvjJ8Q+`Ue?dnJ??iqCr z=wS}VhY#rm?G4Zg0HMSUASEyf5l|KsL>VM#u^Tr}5FqdlrA1L$>21q_|ZLcBTODr2HwaH^IK0s#P=r%7^Tx_f!aq$;9HEd{x_u#dT1b*;$>F_f6JA z!Jwy=oLy44xa4fECWbF?H@Oa58}lN_or z9gwXvCOSOK!MB+c>p4rrgdIs?&~q{9TEpNlH^9p^lk?NS&!-Ra`#dzKht}jXJ6aIgpmng?e#KBncD#W;{(&f+y4IJJb= z@L(yg;lVOq!-M6G$RDZMI650gT8_?Xd|aE~R^Z6|*2(KMuRE95$)`84uB6Oie7Q@yR$B6AT#=I0m4UnG$A=|Qzl3YnTO>$Lic&gcqc zgN|2!)RnqQSF4G7h^|59+)(vZU5i}P*WkN-9T|_|dW4#!N2mYkE%SfNxw#BtOeN>E3%98)t`{}XxANT zfu5u1B1`uj)vr%SuIUoB1DTKc$a*YPXXrE3BIG>IRA(aNaTc;2OOb_Jtj@Bzo^z0y zTB0t~E0BxasV-;k2YJX{u&9?JOSeodmpo6GIvZ8s|E~V5FHn2*Ds>KWJgfB@XE zwa5crh0K4CUZ>aV4Z0VZvUBx?$a|iz{zGp>F0)H-Qa{(5kqvwqS-X!&MyU@uC1#ZR zkxyb)iMgZ8kxSZXb4gc9j_GRTkgh@g=sM($_8@0;1M)@hMXu;(eG9Tgw;@AxJF-LX zM`q|Qg}p{epf`zocK*pVNP*|6YGye?fmy|AYRL&B*&V~z1{u8H+MM3+^&ec#ss6KmQ@^F(220r5R4;;TZ4CL^1oFlyWTi65MOPwAU5zYt z4YJU+$X5?XR(d2d%5}&Lk4AQxS?hXav>K4Lo`8(-G2XG>amZ^iyEVz1?496E@unhw z+>HEj3v%7ly&2w2?}Y2XftWz0;8ao9`_^-uVn~k$0xI z*gMNx;w?pHdAa%^a^>gPJlT2P`CgZ|(!0Q0<#l_jy*1uiug6>Gt@k!~z21e$G7m+L zcbFQE4DU$f&FfH0yAiqT&E6K|Vc$UQ^Y4+7J`MTT>yYcMMD{j7b~lRr@Hk|6Bgh$# zL4LRu8Q4|G;^w3p{c-h}w^dbneaJaKj7;u}>hs8yg>N0Xgv-ksH4N z+2MDq&v`eg+1}0GE#9r(ZQlF5+r2xy_j`9D`~L&v#Qzof^qY`PZbOFr`^X~yP<_w4 z%lm+LxA(zd(ei~0qqA3U>$$imHhXjTnr&OR#Aa_@zjaH`M)+5~+t%#Zylzv^rOCFn zTl>4$tm)a(A8lXLjjQmnZEJUbv_tNVcF2#(j>2WJ4%=FXZEbF`we;LITQ_g+Hti+n z7VZg7U){Yeb$anaZ{GaqJOkW3+uS_UTy$Q4@20gqsrki=(+fhaMi+Lk+0ow|=?{{ojA3alg&78Sm$CmZo+jeZ;)V-rWcBX+Ly2RYO#N4|i zbZ>O2oJuV%f)y;oprXs<+SraQy;GW|&W6Gh$JC)XG52{v#VHxw_7_Dbts?}f2m+gz`m#$GeJ3yT-0H-=hGZ(P5vr)SHi?k#J3 z*F-lNyl*mi-xRto*o5ArTg>?_=KPk>dA|pk+-i`%wFK!~4M0&W5+S{8Gxu%_-5cF5 zr&8OCFh(|Q-Ligr(9fCempkmtwnlfDPIi=Zvcryghn?9SGP66(*e@xzo4Txc9KBq+ zOJsxKRt+w4(dwrWd-)8aNX2;WRe{Z+& zwcGpK?fvbxpLW|%hrO=Dj-$g~-(j!su-DD8?ar~+&#~9fvDeQr*SAbH@U={}{WRPA znk}5o_Wou|A1#ia-Fe$?vz^Ztdw+{NZ~JSu^Vw|SY_{~!V&}ct;;F^KVe!-KzPsz} z_?qqfPqY0^v;9r8@J@5^+UuuTIHy@Sr&)NWS@@<|xTZO{T>G~FX%@a|7Ooa|orBwr z-}PhRZL#gQ*#25EJ~ zw#CnEb6<<&>)H0Y+3q?EN2|TQ)wbJe+ikVix7q93EWB+NPwn=;b_-v-y}#Yw-){S9 zxA%A0>pJW>I_&iw_WBNc-5lHQ9DDs7d;J`H{Ty?B%Txnj%TzZWJ0G*{_3ie1drM^Y zroIi`L2FNccVuoi3?LDZ%@7bBecOAXQi5}F%J0DGWgBo5%!ADpS$BaLv!A?Z@$0h~%2Y!}Q)ag(y0>iY z@7dJTYw2dXVdN>Zr}*t13)yPZl-YBFjvd2{~N5^^z^-Xj9L+{#gIE-tP4~`lQbmC?NU1c8mFL z6i?HMQv`B+o*3EQ*S)qUShH!z>IfFaZ|je(?d{&Yb<5h+<{jI6*K}{iTM3UtM2YU)xaK+|qz0 z*l(rvCH&jJYZq?%^Bqj(@7nd&o?Q}`GVN5t7rk}?)8V-je65pMm)e&?j47Ge0)HGU;_G&zrXZJ*kBY(lIX*nIBnLmzyegBz0o9xdkzlL)_DuLy`ONVF&{csjk8R zDyz*alc<~60T8>8o2wh}SzX`K(9%%bunScPyLRn=YY#tm?eZ?-`xjhq2?|vuucjm?f!PqgQkE$CrazrpZkP(}aV%*h<(Gzt;OLL73 zld~oNIPlsA8FFnsN4Xzk=G@sA>NYm+dMl0j6NK1bWsS5Oe+;uZR(;xF;H0FEXVS5F zAI2HWq_@B?&%_ggh)7Tw>G3d|y34Qfh>Pl!7mEceqdExY2N*xlhnq9;^lo!^Z08Z& z-kCc-9#_gCAU-_qro6HulTIZQv1lZ~#QD`j615X+Y8zT2W#}LkI8^L6Q*Mx9XaETC zUn2qv=-4laB8NC?7>?*lgL=l`qCKW{751IztJYYvP^orCv>(-8+V^@807)h)l07Pu z3A$7e%v+$Us?uF5onE*g4iqI;4oP{5#QX%X(jm=M>B`-INjsgnaY{9etIs+FVb($v z0y?Pyg&1}KUW6qY3T#mW=JpG$;b;NaAwCRxERu*H{0dTfD~;m;DCKE`ol{~uQjrNF zeU&;BRAjbbMMN@@PWDv$Rp4;dMM?o$Dk`E~DjFqPf*_2R)8zh&NM^TbAlP|iEp+B4 z$Kye8Fp3Fc0fFAdT;@9s0P47VT3pt0_kB{DDKcf7SdoLeGqAaA$u1cAWgtQ z1^yvw_zH87k9cLBde}-6a7;So`F$CUIBaSQVv+G!GTu`GOkg#L5J);L9JFu&Sj&s8 ztV}?r%#Tr;$jxa#wcFf{u;St0-kCd^sGuk%mjpEdl}9-ms)Q=)2d4<{qJaqF0CEs6 zQKC<(5u+WAsOU=u19PC{B0)0I2ja$t6E+1YmA&lyx8hhijt!y zf;2!N#xStr#Htw|Vs<$Ah`b@n#)=N}u^%?X9&m~M(TI~$8mSSUaXL4mbwvhJ7HSld zKzUF$X^=@e-lI|}zYBZuh!{zB0b`^RY-+T!sz4>D$n6z6v-_Rg51m^SAjAWxx2Avw z>RcmHDK_Mv@JqQg1q+mmQb>vYrGhjhNo$2hCaAx&G@_~^L8L0!ozOw0A8Z*~fjvYr z5t<)EkWn6@dr~?Yjdi7AbU^9q%F0NWibNJJs7ZRhuU1mhV#yh3B-{|x_0D(LQfKbi zQKOWaFy82!QKLtJP{>HgL%<3v;HQ>0Nr?o3<`F#M$L0v-izAthPLPPog=*1n0BbNV z-=IvjwBm?{KZWg0(#u^2S2M9HD+OYKCF?_;1S*mYBH$$zk3z11R;<+t*#ce?tQAP* zWZvuR)NZ*McIOe?-I>FNS_cqFra&Oz6AYYxP$sovOH+E{C2G`KBcKVfKtuY27I}@D zn`_5Rdk}#=$lN6SXaZwVLEH~|R4nF1Wjr3~N@}sAQPpSV83vP*8A&BZf?CB05>Rw~ z3rzc#dhc~$6G9tyJ*;8i7JLghFa!Hx5W}1+SU+{@tlT0<-MEf=eiT%fNNXr{tYCzh zXU!a~1;apYGMQNkzRS$da0O{yLDm-OqY~(u-U1RRC|n_jYNLi5YK0a+2(-hDE#`!V zPyqA_bK%ZTE!t&3Sw%%<-;ioA1Ex=BfV8wqMbarsSJ@|}K_pfx zXP2=VRavq7FKP#NSrA}VcGxr%foiw}lSI2rEO+n&L@N2Cg`^@@hq2=Ey}8y{?*Xk!ub@lve&Rs)^VHtuRV<7Z0hXSeaw?K~(l#E8^60>Nh(o83XAYSGi4rD%!o*au_ z*XPy_sYG^Gt26)v;lca~KzJ&Ee-#g6>)>&TG6ck_lr^taJPzGhRaM;ueYJ@26ZP<5 zoMC(*{Iqn!n5SYh|1c9!aTBnGj9pk0me!aHMEJN{Uy{`3p?8SRqcqz#G;uPY~OeymF~lkE24e{ z^pc7rSRpzy1)T|75bBBX7)T7U08**s%1WI~&QH=44>uD}Cw9N1b_4~^axSxos=%VO z7{hWBBe&B|TBqhU{3oWfjZ=h#%>U`xFWMq0bwZB2>iH;_>wz9{OiLvebv97J_K8{B zhmlPF^EbYEGbK2f46H?rhouC4)T<0vO+lnChHw|Htq85HLZA=9%UD;E#v=qoBqE}2 zeiT$RmAAk_A@v;IJ)OBBuo2*b7Hoo)wF!n>cmXp^HERPn&>4I+;8RjiUZBUKJ;b=( zon{oxFn|*Y$Oi1)7>h(*ln(j_0SAPq5?vXFqc9MRbtN@u90QrgyI|k#K9bvD?=Vbv zknmhZC_EP)A2qEd_u>cWfXxP%0;EZ7Bl;IWPW_mGhG>DL; zKxut2++y))tWsQ~Ewnt{NN743XUq*o?9kAF za9BozHS`%AKq)^Nj{SwzPy+6&48#QO;x%!nDG}NY1?n;-fjS3SeJz>z%^^j;7RwB_ zfCVmuXCHR`oLn2dyC{6ac*tT2YkU*LN2EzCmdcY~3Vf}sm$Y-$k&!z^=m93uS4Z-@RLIusjw4Ic^_QDy>Fzy#7oECc8D)ip2x zOt{RU8U~L^(qM6|5fg#}krzb`m{7;%jy_NWM&QRG+XAd4RDud6niwH|zmRCPqfVnZ z-r5uP6^E;j8|B5nC@tfHMvLx#JRXv)IX2)&X(L0z z#vqc8u!+INY&c*b(MPz;M5BItIJ>la5jl8=%b?Q&HrQ z7%NIdFj$+(s&G0o)m54CQYjEkBvRCovlv-WX~c})!R-h_i>|DTyEt@6<`vRe5`-pq zLb*U+N(NKjZPcWwGiff1_fu4ww4L!Ms0hhGMi@U}#y^uG5@Z?RI8Y73SO$q<)(|sE zyXa~(8tF>GsKVf5vE<5(Gnh}3d(&P79>WpdEJ@n|VulsQi7iBgpndF!jrJ+%9}d=p zK}<4Q+=RFGPy>-iTomC&Gs<}?9tkLC)4rcx4ui%^Mi3TCWDr3}AlM#@S>HRQecw4p z$)pRlW3zmOh$<@=RYE$&XvW0zD>lxRh*#OP^rZVK9sVX+JSK*Wz+`|(2i)a`{n65=Z`P;2_YXzFc0EPkaCr)$zy{1v7mjj5;(bsK@4XWYO9 z3NYnwh^V&|1wr^a!*7@qH$HlDx!frQgQ?)XNixy7Z-^}V!Akf+(3^ugVhBsg1&kJPZ#?>^0E{rGSys zm^#@HYnbT;=RJ|*40y%auTh%~y&eq=1RnCRQmTM@1keL994^V0Xkc8L5XJl3x4r|nc-07v>gWxMvI`B^XhY)E2 z0Kpi^+W8KGFd(j!qAE#IA+JHGhuIICqL$*H!|)qIokNN-n(X=p5nGZj?YTysLFHqk z3#4UZ^c!Nfu0km>ABN3eq#s5YKs?|oK?PtS^@K?~%vpa0Jcy+q!h&0mboYyvN|~nNFg@~y_#Ti z8MTg7*BQQ=l+y4rBSD{G`;0HfB(fN=r_y3iu~01D1z08GGFh%i)M)o%-5_3_DPRa0 zj!29IF@)4B62m301c}`ebL=KcjqJxs#sp(XX0j!f#6ii}Xi}AG=gGN=w5#-T*6TUD z(DMdY77T?rX-#D$Z5shi`wS`@6^AwIl-x;@9nr{+D6B-qDm{j*eU}RHyacFR#Ls{d z#dHIO2dRSGrYHv)n2~nq)kFZOq>BBHR?nFkI^B6XafHj`8Q8IzG^;Uun7}>^2Bc;Z z8j1EuL?Lc$3sQ<1&eY1v3OEH4O`2cuc|vVv5-9dN;>IL|jPSOLB8QXeHiRq&G6gA( zKuH?bQa^!o#UwQ7HgrnkNU(3;kkh4wWVopg38iltTr5#B7$7iO;waIIR{F*>}eN@xL&K}Cfm;NVJQ8|bcTBz_lVU@R|Vqe09^jIG#e zRiY9K2c zuLu9q)-`!y7}U^}q+`fsO684Aa>1yBTU(UK5tvP@%}kC3O9hB~P@m)3Nrr9-GBt&i zqGs(Cnu>g&OFDD4QS2-oO+^uZi^t3mW% zhtw$8nBXNLk|^xJXmnAO2+XLAiG9Ztqm0WVh$LlGK+(=Kjs!l!Ixzyjvnh9i%n8d( z9WipOq)?1iMv;gX#t8V3M#t$Y9` z$z?RG_sUD`R3YD`Svgu=N}VSX0O&f#t=Tf-gh~ z*dRd=qos@u13v{5#OMb`5th059``kzeIy4XNDdx(zmT=mk@By+U%FzLu>+$n!)eE% zPcP0QS?rb_Bv73L=uGi6Bul&tY2tQt<*esn+bs@ZksHRfRQV3V_RhUXXJB@Iu zg``-)2YPBo(F3WM7!+Xr*TmjIlm!kYWRY+qDa+`RTCq<9?3EoLX%vPx4m5_rH8EE_ zPYdCNWO7lGEL2)MmKG6iYG6R!7BK2}0mlLbC}^+|9WoKeS>Kgh>V(jsFva6~x?Xz@{wa6iPCxJ0cE%7EQm{=4dvT&g!+v#|@2D6J9H>M5Ii?Im18qNhu8RY>lzqN;) zE$GEDEQ#W%=x^7lb93iFx};-?bWbG~AwV@`VkYc^#R(>)i#jk$nM@|Kk{T%@PB-JQ zPSg~uQU(mghJlr$Isogk^_*b=PvDgpei_K2nJ{^aMLF;=>QNG&I5e35BuOBVaJF_T zC4Pbk#u&1GQnNAWx)(zdLKI>YGkEG7(lB@vlh8;=G0qu91FjjWE5j%01bhU80r83? z%=C<(29Xvj_){rY=95e&x+;vVZnAhxk`9{5s|;uI$|)G!LnIc-*yuBe9L~C#{SXcf zH5anohMF^F)QoBtrqu=^=V^|dkK{I~?lY4xNN$bUZVg$=a_Mr~#!v+1lwy{)K`Z5y zQcB&d9>2p_c`YDe5J>DEFy&V)qf<2&W_-r$-VW z8Mms0@=&xfof2weyX3}=l-7ymV@{i4SYZxIM9a*@5sR1vKZm6hxnp5&9-Fh zBh`t73)Q2J393YRf{|*v!@+?$TP8Y9%%MzRGR;{|ZG+KTN+isx99Hw7dNP@YcbJ6m zPNo>>bfPtit6=(<33VWs!Oz+T1kq?x zI?gc6fFI-+j>0hrE#)F6O-;F@9Eh4Iv`ZhtSP8hekThuscpqBPR?{17ihK+eNS!G6 zVe_2bM|9(%Dx#dQaz+w9!7UV72=P;!fji{IbV5jG@wbrJ5}V2BQc}%nNaG^4K_a+|=f1xo{1NO7gUEo2TX2xlj?h4_1~{;-d6uQ9wM0 z#z~vuWK<*~zv0>Z28tS}ydmfc)eM7M4)h_6-B4c(@kL_(?%+2 zD-;GHwVPBunW%@PjgAMBMw6un^A@C_UA?Y~G@h0NA8Z(kcPyN^4x=3$3Fv~X_e#R?`kbi9hlaJDl-+a-1%S5d zj^zbdF&A(JOp*QRNm%d4hO@+w-cx3ui}oo-2Lq8W$P4 z8N0C#Id5Mb!Cj?$HMU`;|DssYhRgth$dyp==Oa-}1A~8r1?aBY(bc7}G{-FoNG2u5jEV-S(ixr(xvY{Ka{F$C3;Sb` zbi?V$0OLfBjf~Od-|rx_^Be{;T)8!zem^KKjasRg@*&7$$ed$~0xUZVEYhI!jMat= z?19h~{OJn#)9@x*M9IQP@GVqk!hka>SRl>t81V=s($N%W6LaOL!f?U?wJ624lVUx- zqgwVbNC3vnqFMPxwztzr@p%9|sJ22qBl6XZa+eX5DT9Aya)85++d&7zq^!o{S94U5N(e;BWg+hn)Im7Lum zwXY5&$gcY87APYECcqgx0f(S^h%!U<_)#=ysl`-YwZe?3iF;t`D9~7uaq#M$8qkpr zPnSfGgnZclfpcY~mx=SFeExzIyPId)fcrbJx7`m-lMJ)0|%eXrIRIvP{P`D zxSE+`@Gu#VLWFvf*gy`>)I%ZRD`1+iQW>gbrHOMexP0nqI>DKnG{>>4lC&&QR!aCYKq`+06E{3C%l)zW8b+L1$!!j}SwmeeCkMSvVgF-EI4#cXRZn~S&Ryc?JP!QffkMJEU;io3MK=q&`a&-Vy+bd zg(Mc9iJyb`NJwLwdSI}FEXB0@|HzusX1OUDK@bv#m~%} z5_2P>iDlU3)T0j1%n5enT9Gb5#a@C-g6LU8f0ot+L#7vOArlORjwtT`LGCuP#Z10T zJYe!6(nYoy!GgXCgdqi}S&2tGNNAA_S5~V|hHoEBq297IMOiH3fR2yFLLTD@aziYD zI4DVK4t9sE*kOX{z$9^Kjbd456C^I=E!ZX|DIPf}W3Iqp5d7k;MBdv9MdXc8K*zOM z2&%;xRD*LI$EJwHJz{GKUn9f@2RW%&?&Vx$n>faROP0KzVOm2u-l3X<*Uj3ngSI!g z$}qgmX@w(T$PDjN3Ln(1)ClYslhBN?}w-ia1 z*%vNiGJ&oNoUMdmCA)8M@sf*lNmHb!vbNw>?>wx=4kzH{Mo&5Kn7~MROARKgW7ym9 zyg`F~55H_|3-k`(71W>bBME;e>cKsK3$y%%G@A_wP@RJ=uyD=VMY+Nf zuJRUOlk7ZL5eo*s?DfjYN}J`WJx_8cE4!FllTCQ{*7l6xpp%X__uZLX%)SG9YFE6&K>!5dExs zFZF0yaq+wvdz;O)A=MF&VP_GB%8}7P1wd3qDx!t$Pb*DIiC!F+&p`-RRJa93b=b;_ zIbZCn@Ru}$J=mB@Dy_!=2JABRLddO}B@ZyCOl1ZvOiKdB<|I~ZXvX11JZeFVO(B)y zrWgyU7OHsAQU(1Blw*X{lro+l#19fC$etvfD)D_;m;tOH69JyIiys)hO(v2o9W3ak zBWt5GH*)YQ$0GGRbK5wL1uifHCm~4G#}EVEF=3DLolY6&!2VPUONL|EDF+0AeSzWV zBAx~Vq^H8qz+ouVNEM4fLL1JQ8Y%jXChAd~y^t+owxBek6G4Y^28Q6IBq`xyqg|~V zB+<2!h!G)w(#)DLB6zvtpuCJVvaFjLgqd3%Gr#jjI&_|$RirG*- zAZJ5!AP7^=*&yID)-F=752;!!b+t|(2HgD!X$EUx!}W1`#Ko0Cu_(7%nKl$lkXgpOvnj32-c8Aj*Y)UDBGeB@+8iSy%eHpQuJu`sKHPxtiCkt zRv3ylBub~<;v%ZfRAFD$P@z+sG?I=WA^474IgF~Of-E*V3S5rp zo9x8wRI`j&c(^E)+;3Jc6=|B;w6ShatTu?#xJcwA@W3h<4=%iibv(cWj6!VM#+Wc| zWRMDFGB;omRh5FdXbq)yX(djf{LY&RUJyCwfDA&jF8#HyqwXLKF@ zO^2a_XbYS4A?lkr-T31`Sfv4T7-KZUP%X;v?xH}uF=2(Byohy(AqC6PM}6@_ICD_`7k>u~Qm=#E=}7Iu=YLMOmbu|~Tbu+$sa zu=&Dbe8g!z%!<5Z=YSL?HiMf8 z5}BC}yCx7b%}9P*4tuy@;S*=TEw9C3P01v{N4C0}blo})^&Od?x6!<3b zN@N=PBFRfh4xs{5hiRO=Yo8%8m4Rc~p#&(Eok@~OR~1h>r?U!(z_}|~b|@=po8+D( zcP2U9o3P@|DD<$-N<(KkbdqP88DqtRaI8==hht1+<_`@nf!y#|+>TSQEV$Q3Xze&G z3s=GH%&UXvp15WWW*~^uuoe1b=Z3Xt_`!@AfWMeI$2v3O!fXl2OaYg1!X*Rh0EJs> z1sz#dlWMsbX$!ly1WU@8J24Vs*M5XDASjAH6JvwaLz{CKs#r3Tj73l_9H`e(-sbcu;o!QC{?`(#0fJbE0f}kp%JO?O{2coky3MYjVz$lkiY;(0-OX-gd;F& z)>0C{FdbRGMATKu2FwMZ3bMsaCpYyxbY-)IC4i-dYFpVXh81gejEFX93PE6F5m>Pe zw>QAL-gR_w3_-El*U?fG9BJ1@4j6 zArRB^BB*jjPWeFDj|`m)KZMoANzP+A@|zDCcMyqJ)E>YtXwT{p{f1B=h9>Sc;|>_5 zuq!@79K@J5E!s7?RR|Si;zahrR?g1MiQt6vegN-s2!<|PS8z_OC zqK=Te*Z?L+$kT`x1WjygAPj%8c7w2=om&cD7|R`CcxO0@fPg|qmBlZ3v2fTiP*}B$AZb|i7CjQYd)as+oDQ3RxfQ)!ZrQ-OX47RqFdL_jd+f{=0E5p>)C=G@e@*b*6h7UxDF z9DshT&0^=~z}Sad#!TA!cE9`E=jtF*e#_XIK(~^Fe%XpfqPg}XoGEC|Lrm!(&dPsv- zebOAlKU(B~fK{cmd1w&1N@LkiLLyIA*U!$K3OX^BiZP`lF%%O+l2~rVLK&9+8+|WD zmj~*5^k=PqmXwLUr(gyZaQg~3WEx}uMdY1{dpRA*7;6ffu%w^^QRiI24GOWMC8&t4 zE75>Zj56sk!Ho9{qjHg1)O$oRa#OVEU?#RWhgJ_-ts-+HI$YGC$>mV^K>`|!#f-sN z!dSZx?=KZg1+pb{p-4T>BK1_tMa46jf^P-+N4%QFwBlU30+JH5m&I{K^b%AEgF-PB z3@d|Z!~3+>aU>s9FvPe_f#mgN&LI;h3+)c7rzq6J+cJd|%M=i8Or!vEVXH(0(o8jp zXc_@IiP(v(=dT0d;C{qbrDEa88#vhhkl{fyat6!4l(wjeAP__J#ksLGM(yNijM|?o zJ**-Hh550Bk0+ZHW52cxLzEN7=y}+o0vc*jTs8(iXaLw~C`U^UM$u4ZJU|U4DPi%0 z$qC@SYWrmBcO}aOKhUfg3}xXi7}f7UtQDgB1tP4w=>R@^TOq zt5JTDFO)2UQp6^3R6O#IKZB; z2`;aNV2(jBTY)U;qBM(qCC&~!rql6wx;9N_kyJ@M6;BB)85U*(4rV8@xnpfj0Ui$A zu0`c$bOt1`FsVEYRK*#!5CH(}UE#+`R&bM0EFK~&I;BbQt~~5Pip4_^LAsfx*8-7f zNl-S(%eVO9qH9t%X&dwHs0%WMuyE&*(%E4RsgK&6Vh*rSi@+5NAaG;m8oQkH<5IVw z_3KfMH zsRfuIItmkm*(yv+(S9SHW)Ka+6NoDC@O_tSJnZkJ+z>^JYSe}IfV(wT|QDKl% zF}$L%l$7cAPl#-{On=(IU`63d013>e~Kt$xs6- z4owwp^1@6N=ZX9j)j_w@A^3o@-so4Y63exgk(wtOFp4lgXD@3IH`yLfu?-K9akd!mg1- z8AJeTtKxXTmJtEQA)O~hv}O~=gve6s(TCEzp?P!}UP4LeCg2YdV=JIwC_|-Swg4ue zaxy^-FhXj`kI^!K>%A`iO-8|f4p(=ZEZ9j3 zrT4VzqI_U3pL&#xYIz)3BIZE}TQft#>tgaC-Oc^DB&d#U@ja9lW0x%4os1$>as;;z zp00p4mnaEMiE#BVr&)*)AK?TrjBJ~$z%29G#Q$u@wzzC;*l5q=BU>DhF~mie_8UoOkXsKr@3kffJ@~vc zRpegqREl13iACj}k$RXG6$Oden-Mm)l@-qu z=a7hXCY6{kP(7R@B(Gt=h@8RzAT7`(IhLYI=oi0%ewks|Y3LV=HDXabpa)zDL(y)q zS=?*WEO(^Fl%!{)y&BI}IP~S%jDl&2@{~l9TaFYAPG3?IqOFAS44Uk=j>NptSk?3z z09{mTY&ybBu-KV!Pf%D-zcr4ayEsTV4m~uMNaAz@J=VhIw1ak~N10|LOc4t&#*&%2 zIw?0@#wd;n7vb2lmf`|XU_{23Ny0h+P9@=zC>X z&>@nKc67!wDH|PZ_kw-}lLDQBM@~A1M`>nk#Ufv3)WqDeaD;r3NMJfnB{wUPN=e|a zP{7HJG3~w~TsDh;5cq6RLdD|RiF;RU+i*x}(-G|Q%^FO!T=sMj<1eyJ7y&?!^A?LU z!Fb^|L#fA+QTTk2g1-SODDVj;-#lbZian1XfT;$#xHDHh2w#aa>$V61bRZfePpJQB zte||8W9RQ6Qi}obR;}=~5BcPmJ`svBGb`Z^>1TpmDW!~N5;)960tSOABc8(eBA;vo zf~#qNz$Vw&A4e>s0GuIlZtDwxUAS=-7-tckZ07>FxgmRMH*{HM57UU7GGgo$_yokQ zdy*+DjNd?DS4#(&b;vXe2P7JXUI^U{x(6%r-0T{1OtxH52)V5-3|SANflpOTML|p!?a0?zqhhjL&n0Syb;H5pLS`*h`EumcO`)hc{79S{(5FkdN=yiZ>%vcT7ewb4gSF+m>lJ6htk3=1K8zAt15$;8 zA!3L`idINCIEZw6T*P58YW~|kj3Vs|J4b}}+rpwtyWQyD_F)XA2pzdGTvASLCTdbf zYa*v9IX`49lIbW6OY(s`31siF4N?+IeG;WxG8RizAjMZw*~m6;GkGVrmO!O1Vt@%g zs_ZcDMOkaYzc6XaFp56&WR{vBGSx;U1huj>eb?YpU|cM zKisv^jutb@l}@#am4^vLoUzv!!>5v(;A(7JV8nuDQ!OStue+FX(Na#ErA{_QK$XDy zrr}}*h-JISEWo53v!=Ox8XEwX6CgRn4vq_D2ggNx%3gW3+*F!OFc!IkV@qfUM`Nuc zb|qGm@ub}Djo4}c^<2z^1jXGOV=>K8J|Dp&nalz9eVz&rBivi4h}VBjtkh6{p;5uZ zK@@;%RnVcWX@dcOkWm$LSj^y>f=AXIQX{YJ}fc^L?x?KnIOMKRw%$#bKTJbZ|3icg+JeiYjYB(bk< zGG6+m>EiQe3lD2;;azwbJgbdx`_99=Phu&Ig_oq`WRnD1xsWW*Q$Y~5S`1$y17mlF z3}1{0zBVbI;)dP|amrPONSnl$6LqN9VMfUYPi5XDDhQv&W|lzz1EH1ZBnJSTme7=n z32vqpnSYw$A_EKl8mPup9os5da09|2pdCC*88Crb3#GD5jSv1znBp#7peD;7mSW+% zFenpxg?yO5?WVVQ1=2-G+5cbMO>ZMO+V1*@cmbXu4UUYYlH5Tt1u>a|nB*?E9(TF5 zE3Awx<1-dAT?ioKaW@CqJ5G}$z!Q|DrcT*VXL0j9xYbNz@SV{N3ZM|7l4S~Bs>Hqj zukM^D&+Fg{e?Fat+RN2~#XY?o(id|SN9N4#bSPC5c;F&pZ01ptgFdeV(^C*zMs#t) z#EcN9hYm;<^v-?nh5ccHe{Y zWHAoZXeh!hJJ3nU(=71;^~s(|Vz;7Im$9b)_{@ zl&G2#6~-0zaHe)<8Ch{3tiffg>>Nl%LserDCN`AxNOA>E1W~kNU9Z&HqFuNd8FGdw z3~~;V*-8*mFbV0}r!bW6PFC>x!@CF8V4(OXfB*nt6&bdxOs0lIcu=aFjE;Lv>`O#= zP1rbrZL1jx!*b?_RpG&Gjj`JMFw~tuA9)5 zS^7>iq69=9v4IV8S3+h=9SAlG4pm*0Y#%5~W+5S23u3kpl&}t~n8Z?$8D%yfXmNW) zN==vGCoCIFt3mAEfqWio+17zcc!5V+4FZ8+XNU95f0!ilE?>kIEMokD>xy2SnXLmW zLW;R1pr^2S=?E%93cvsi^i5ET@fk-p<#5c!1_Z1L5tpNsY)}w#0NEU}Dg^O1aD?m} z=c+;ugL-H|W8Xq-GKnWHMe)QXQ#n8(XK5IZl@VZo4@<*ChsNXPvFasTV!BNqNI3E^ z9>{EhQ?f-Mvu|WgBg%!SFC7j=oOPYlxi75+5s^V1l!)5>#i6eX8|+m(H&E6VAC=4gf$lNhRa8a;8qpXTV1a1xk!2g&sNB{${{lXz#MR+(7%Am0mO8 z{$_U4xx*PPR>DSWf-fuEfV={ptgm0g9Bq`zMZXJiw@AQf0@llMHo?(Y!Y3twg(o~0 zoPR#yc{&h7LPLk(S{ljC5c&9LY#1C_w&DDh?qthnO|t?7PjG|efSp8prn<5!6(p#A zuu(t#Mu{BZ`E8)37z&hS|F;n%h7KK3sKGE&r4S#eu978%00b7AK*uMdmBUEwEE8z0 z9?X|9HT`YhRIZ-9OJ5aPlX4cJj8v}50ayY!iD{s!Eo?{FIU z-`t~5sHNmh#t(TXG|ZK#fkH(fe5sIl1*cO0m=z3?5Cy%vC$ezwJ2Z7R!Bi?;J>Zg1j2qdCRkN*U zasTBaOg4H1njqgA(7?~2UlEfQ!a|%8UR(-3=LNa*A?qtpw~Fd>$VEJEb2*&PSejrK zilVu~&+Xw6jb>0IDITZPjn$<~Wn-q`8}LCwHAN~$HLLYLAsETu#2PuxL0h0-sa7H5 zV-yGA^Ss;&#AG7Lc%=MUU~UmJs@>fYp#9NDsUA`Y$u}q*ca07na0WsyO@Q-DuGqA_Ce<@ zg@^f;-v;kt=V12@{Md817aj%#fy#gN%m5TN{|Yfm*otL5>Ti4C{cR7ta5dEbtv&Fp z&V-z-mfZ^qYu;Fg61*9DemcQG!CB(w~Ik(TP-Ai%G-6VM;RS3r67e8&ZSF zY|te}W=%xpYRuz$v6%K^Tj09l2@jFgqAX$LbsIYw?*3W@^S`m=YRI;OT`nT3BvF}2 zQb*9%L39$<^8_5w-h(+K)hZ?m$wNw~Ftm8`vaz~QPlY&~0ND-0SnRECRx}OLkx5$d zDcrQ}Xkkisc<2AnJXAt^+g(7|RWbqB2$~R^=WT%o!eS+O^vR_3S0~TF9lb!dP(LaH zyiAolAkwjoF>gVZ$(xE8VD>h?0HCAk6ImB-|vkj5iPz*Fj-0p|KRR zeN;rKFH}KP%9BlbdR?))2+)_KE;drC|6D$Un>U)uFISgA$CgI3TY+fu$LzC4(c?!= zBSL(PmL`0zwnFc5_RicCj3M;S7+ey$M(N!y)Zvb)W?f9mLI68hB7e*Sx(ug-fr{9{ zA(iqa6}vIDz)<%HBn7bx2sE;1`(}9bC_Ynmq&bD{Y0J-b<`7bWH7CzTi46x|(?PAT zmPL$afg7Ty%x9UAbI+B2)1OozvRV<<;IOux>4zb+4l&LxzDILy-BE!sldA!itFe61 zT8aZ*4hISai+IkYF%PQ}pc5{w!v3!;(`OvQ?)l2_prD2kS=xzcwE$~OjmC3lP@m`d zSYIiV;dw`S3(;y-5JL?h(!6L5c~_WY5L`&^!fSn9XiNFrr-br~d2>7v6ow2QQD(B` zbqhdh$e^?21YKqx{5F)mSXX7V$RYM z8}tZVdCzgUsZJ-);vzbNNl%Is8GJ8d0FgDMLp@?S! zi}a|3v!3xJnBwA@(At>{;DViBOM=tj4EK*B;msjM92=_{52i7BZdL$Teu;pBh9g?j z;GU~B1DjWA7`uJgmLsUBNcX{TM(jQf)MFzLlquJw;zQu^*O{&4R}QVt_#!;&awpka z{oQhJkgnK$xHos^rj8lIz|@$AF%9GJoIDfv88Uo`h-FtHi`6t_(@1r7ZEV=Y8ph;X zm`S6;1p%Xu0FoJTAbyL0npyfyg(fd591^tr@c*=TZa;Qi_kG{ze!tCyLvlz_)aVjf zmMxMR*^y-D#JO1{JMPKi}_ft-bd-bLK|NfP(gnX66ia_TFp#*6)60ss$|v`8ER& zlm7c-kt-iF|H=@G=wNr)>pmd$K8=Z|UE)aH7uROO(Ue+I1fyomguABbAR2vXsg+vF zte5)VVUzg_+Dm>1)-4;&{x&h!R4N8N)h2{f?1L=4f-56`W|AzTGYD; zo_GBo@%_Z-!NjT``-qj4g(tEP?EzAbKF={SM;VS96vcOc&VUw?oH!_eW+p-AkQ9hF9uKwZ;gAL6BA`iiugCH4 zQ*pz^QYn-{#AHtd%#R~^CDcg)u0qbc_dOAsS?jy)&t$F>}{lcrW`PwK)bT(8sA zr1(d%*XK#)=YQax2gf>SDeZRBJ=tvQVULhX=rJ$ogSaE{$e;Sjca}4*tcpAk!S)u& z4{GuYvq9(4_{;BpODR_?E8CV`gzz9LK_Y*q^Q3{FMdt!dP?epo2RL1MkbX!M^OBV! z4^SNzqe79)hLRy7<_BTpy3)4UN!Aua%15M3PF;amOg0co>_b)Ms3uAJNKa*AGCKii zwkFaZ%(WutezR7*l46NQ%CdF5giIZy(0e)GRx}pR-m7Vt8bfofq4ih#CABsjz|DoL zEm*gKk6fzOd`6BSx)#sW`P5&Te4G( zO&mB&&B{A03IZckv!3Ku_7HCue{;!L3_?6Sy__!3Lvwf*nD+bEVi9t~-iTu6_Q@*Z zHb8AynAaAR6~u5@i^A5umzCU7RAXN~7C3bRX3f@!0qsKoGhpC03lnnb#Fe#ioxp~5 z#K=B6mL4en?o4$Yn{SIKYZE?i5x#BmIPIi+)HIBX%o$3`p}P!YnuF45 z&Jf6X&N)M;-QpZE45>6?a*}%>Nn&{teR_{D;EVU#wAo*N6Mtm_Fl1^li0oF*tD{bq zItkS|Nyo{0Rh<()S4PP1FsCu%0z$`xk>CB6?;QB(F1zqS%o^RYcnH2<^V`lt-Tj7q z11o$Myq7rF7sjSM53CxM-_s{oG}w_clTg`ZVd@ca$4&NGx*zuppyb;%zr$kFYGrrM zidUDnJjRQ?EBu$%>-Rl^<-Ohww~wg>aFgAdJ_M%0+$z;&j(z@xgRPg z>YCww5<~{rB?tV)X&w1?h;aW%lW!XV&r`qBe=j0=K5Fn&ucZrJ0O zmOloMI=(k_B#r(^CJEaG1)5viHMMc{S-_DAmi`)OPb@r4{GLhVH_Xty$>FbqRgpdEu-q z&kH|WQYYyK8w+V|95CAwe|FZWblGg-nwyKEt=fh+)Mcd7BftxsqeB|OkLU+a-SlRC zf`$klA9PJaqKUPyjAksY*aeJMa(GRr09UnQ7%;09i6^}x0(tQdHZb(R{Hj6K>qX+C z_lz~7k4&=(nPzYS)@v1^*K;crU^$sMI?5?Gn-^KH*A}8$f*?Uy^kp4F?z+%~GHmlY z^;;y)db2JxDiV*XIi#aE`f(nc`aD_d0?BB(4lt6os_cq<&+rzlO`MhZPkyfJq*=7v z(Y*hHej-Rr+=LTLeR5(Mq5GS-yu&)4kBZMMU(yLR+;`sY1S9gv+q7y1VI`H!M-Ho! z8dlMdwSP{uWQe7!!djSpv;o6aL83?tI}nc9V6wRclL&686LKzfO>38CWlw4Lj5Gly zeZp}JjH2}g`%%v~r=Q_P+%&gNN`-huU<+GA^91vQBb!MD^Jf9#8thp%h-46UNM%9H z$e>J<>s~9zD>UH4SeWE1q#@{CCVpsuYS#4S&mGBW4M6tkjF9Ita3PkH+wGm>N|%yE z@f1=#XIYFD=wMfatWqv0-K zX1~$=9`2tjI8dc|zpl?aH$mrFo$YQAA)MbLz|k`&UBdio5KZ-CJRi*%!3IYwkY@5j zF)V4=Ps%d~+)!(A8+`%-f}`YQ;~xFdgi}0Ud`p}Q97A7(GJKBV8&m|*6f1B51I{g3 zv&tM(FMi9&2oebe!Ik;eoZ2xc%ILOs~ zlRtDe2jU*dxtaiD<}S-y5CLDrGF6C{j7V8uQdC5r;CF^r#Hh%QC3&k4vu9U|V|)ag z-{=e=Nh2xQ*%w}_!wOQZI|N!No2;hh6p)f!@>>1}7#$c4v7)8z6~7f{_9||-HhGD) zNxN1i)V|tGFJ|uYHqYF>HsYKPeObHFsmMM zd}#twlq8l`xa-fyj-KIP!6G(97pEMriF_+|ks@FR@u4QmKk-w?G6xm-GNO2O!VEko zR!do36eHS|=u9{kXGm}7o)NF4bwSAy8*Mbg-e*4(ggDL&jKks1h(@hGU5 zX!B^;+d<9VzqduVw)W9tLh``1d)v%mYClYWFz#Ufu$a$p%-P+~q#Jb~|6q3_oFcvc zh3B7p*3lGZD3k$+t?r^*i>HLff2j(m1epur7I&m09CU)>c_(b#y~D|hs*Hhd7MV;C z9XKc`G)!l%Uy>YBNP#OyXBdjwZWQWrKchcH6NJ zF=Ow(yY^kwV~^`Q-1f2ZkJW2$`CRkbS6o)Q#(wed15asHj(4t)vcQbK$ryfs@2xSW zQkP6^=Jcr{BS2PI6{88!J(;wbt&$kToAs+3V=;>JUyj#)J`Wt6@6N4&gybcf;y8tm z2mu4u9p3pINT@j;Lbp)Br6!9k6YfQff`0<7RD=v}Rr=L7)$^&F@f#Ew47x*t{|wVD z@Z9%_X!M!WH>Svd;4zL0^BTsx<4j}65G@5dwv6|eZ^qR$ynBMnnFHoF0atdMzrLdF zc+X&_X$q?1OWvGA_6?4Ty1ZTX#h$}PfQ(dUBrPmkcfpNjh57{J$0T);sY5zJd62Aa z*%rUiP)31X^FBI``YZBCnYuD~rQOJVAo=W2khz^GH&LtnJ>mUV+5|H1r2Egi*wVGT zYxauo3_XcOC?LJU0Uj>@zGxrGG=}(xBnG#-4>*BL?5UCa^?RcD80lfUcZ~Ihdjy|m zmWsuLRl*^FD#I?A0RNJR-$-Rhi<_ywk6#9{{> z8rF1tXoup|dG$UZkcyWibp5E-Fm_hlT7D)|g^kG|4G!u|$}p%(%7|D3z$!r%axApQ zZF!z>RKQ0`w33gWY$}D>flI|l@mUs|EFSi$o#y?4rqZ8`k=kVIFH*$a$HM~h`2 z(*hAW8ha-HrIPATh{}CV#LnGC_;AhK9^9v{yXQMgHh+BnjEX0>kkimRhd|?6M)y3L zqaUR-FpAQo>?yO7*d@GcbhMaFTB8wqwUcsgv{#%@RY1N>8raH714fph_@H_dpgiCm*0C4k_z-v}nztvNB(4 zI!z7+JHj4rjhc>z?Js}K*H1eW3})Scq45{G!#m5*MA1SyH1_pVIjU4hpr zR$J4*LkGt$mpN{?iZnaf>1ZRMiKHbymO8EU@UHyglBrTXilrEi^=P}bRl^JNP$-0U zMXMr@?e^qoXEAFzE}m*p4*JK9qS7L&9qn%YXisA->3FqZzV#~v)iK_(zK>s7{*t}$ z!~Te7%(!1P;cKQcuyz-Z_v+5@1!iA&x4SsnX)G4k7CA%k$@UZ$QP@K9Q!-cI>_Pz_ zD~0J~YTM#%?N!&kH8Wm0j-SMQFeb9#;2L(QIz}@X4Z5S1dENVVsbd3lI)jI^aj=tw zGFSTbBGmN)rr?PobsAE#Ko-8FbY)Pkp9`m9Xan!Yq9VlwXM zsY_@ftXfeCjlDFnlyB4E4}vFGuU=gl2Oj1p2IySIKC5%H2LV#6^?Cv8%>{az6bF67 zfD(lLx7RJ$`u|ATmkzNC=k4O{!3|_hL2DZYf@7=YaFIZ@2CAqtJ~!e^BfL2Yo?1S z5^}>7juoCFQ`LR} zVgUe!vLKw!{hU>5p}))M7WE!FJN0Pec_gc7pgYquqmPfrBBx?j&JPMC$=0WLtUwKj zIAP8NC&sU0A|B+Jn#U%}2M{j-V|D-P_#(;qfO^_S^8roZQNUUaS5%K^NiiD17G(S) zJy}SrWhc!wJ83pSrLoHr5RNx(JOn4uL6yp%2wX>j#{?A8Us@dpR8l>V2`O}rIwzL& zG1WN6w)>B%|tmVWyr|UU6azmX{`Tx$Sb0Po=#&Yu6JM)RCb5dMTS>rkz9T9W| zy{AH_>`8hb$oyDvLkO0>^dG?HQbB^eF-QB1I7U@P$*21reB$T$IH#0Jo1!oB zE5&{zn1J|F-HAY;5koR)=;a1DKwlgzL`SoSI;~b+oKBjj47$3V)2XB!`WtkFdJ?1z zZidXv{vz`i4yL3TO9S!R^G`mt!dYr2iPzZIcb>_oCtZE6$*1Twa^i|t@MT7hS}nf8 zpKL3XFmVZ31UMKCqQugZ4k0eKs^4huXU)=O&1se{=a6UV5{nO2Ool*zw;wqa$=a?d z*(~I^6d3hfG1~`h7t3*DWrsmVAr-VfR-%YRWqgXy)Ltb{v$E(7D~jqu&Rw#4`gkjp zWx@K@iFVi{{ZP!-45#mMy8f(B{)@YNjEG}1a|&=!L*{7AokR796-<_0~?-x)QV(|n)IQD<|E$DI*^i57bfx!%XR0lnzAyaGmOg~IjQcDXca>T zrzU}$hnp7Xs*w5uReLC6Fj>SR*R()or|cX5o6|HMj*#nEAy-1N?J?^9T2tNqdo!sw zLN%)ub1GkjVe`FtN*~D%C(!^NvU#mIO5JnTK`JN$z8YM`GP877mZhPaEIZCtmCT8= z(^wccSV2i*xV_&q&&J)}?Hc7;gzj91u)lm!A0?rL3dA!$OMbw5J6jnkVlymXXeqT; z^+S$C3LzaUlOn)7u!GgFV1s(k{6AAC#R=8wq}1CG$=jp~s)2JFtjZ^LD{0z>V4+b(w~DcH109uSaG$B^GPzLg50ISQo+Vc0N;qsRu5Q-?WVppuG1 zU^U?tb(U#Xhq%M4MkKEjaDj=K)dQP@-BW6#EVpFy3AY?!PIOY^;kCMgn#5I+;mU^u)Q77cFCbSrZkC+mqHr=@G*EswT=j zG}lC3zhF&NzFqX@4H}gNTGd3c?~kP>s(O+ZUvYynJ`V$U!kVbKwFtjvl~$Flsy?^w znrfqX(0MANpddMw>J?E|ohT&s&RTRT@Zl%6L~Bdk~CDa{Q2CVjw9 zOx|J6CTgKxbH`K?G`rN2xQd=0kr%6kqH_^=DkWQzSu$VmYcSN_BwNSwG92HPu8LDE@FcmdIndW*{aV=)+ zdd<0}Ht_76^S`-<_hM5UL<4x4IMF>-$y%OcNGY7x8_-gPI$4xFRY<4qpFE$5Blb@c zOX2EGzQ{6l-0Hq;7CE+R^4cHqVl3waq{fk(GGmmMn6TkDo>=Q z(yw*7=CNg=QZ@G+cW?@4tqmOSs$D`0UAxxKrd)y~gMu1q4GNy-RcPOvr#{#B%~H?` zn$3s+-8ggaRxN=!RA+sjEz3otn#VNtIh{S;v~5uxct~0x_JwNI)C5EQO<940duY2k zI#Aa@)N>{Ei`zBE?E-PWz$}}W{FHL(m$Z#q-vqG#>}nKO>4w&bQhli) zY;DIlA6#6@4~MbQlZlhXQ(;v>+LQk!+B}>7Q`fwcsxNuIvE6o$l0$e3Ij^y6Gjkb0 ztfRCifcu`hn?d>%W%SjE2UDMVLD4;M*L-K?ky$qmio0*=UPlY>5v@R!rayNvlh`}5>;({=_&(6JWE z&TW=6&%P5}wY=9~jIiFl$w8xffJY)Iov<*)-i?BG+%nkQ^WGnq6dl@-XPE8iq>$!e?z# zvPA8mx21hdXeOuwm!%C^8lIZ~CknIGXUry|4(inE`i8FS%TI&X015R6Ff4?8-_aSG z(s`44j5PWi#r@@5Se6iPZ`dLOQ;pe}T%baM8I=Rc4R0=Ex+b8Ma|V-hG)0S?_YkS^ zdcMDp`QrhCHCHV~FbFV+8pMS3t7ZeZ_c{5E>IhS-oWV2(9E69^_YVyYp&!8zH})hv#ejMsFD8P?ltjJccxwJi9`uu2s<3I#Vx4N5Y;C3K6PY;1b$`3a)6AjrxN`^)D+p&o zMHL9ioTwpe@3k73@E8PT%I&tX1_l-+uPzEedFaCGbmZCM*8NxNUrxIB>Gdy>W>KTy zy@GxjWT1glGFa&HL?ca18Jt^3PzBhc5k({cN_p*eQCrt|ioqr=oefCDimx2XqXnsnO{&vkj-MXFj{n8YD5TCn2TRaFaOni1fQ52JJ@H(rI- zkJuui>RI4oBs|sXT6o+k)hvhUJiM#enc0kXq!^8Ub1;(biR++0 zD|&0+3`jzrxr(ey;}LA(qgIZ{6k&X56|_~?UByMw-tRan1mf$~Rwoq<0OM5?DQ`)_ zc+^gwHz?f8F3Psl5(y<54c$5oo6A$V=-8IJb-*Mz9FddsJi^nRwpbh8RN3-z zU{ccCfpW`sk#nv)8vRDsM0!@V$-Pc9IaDE?n^2eMjqTQdI7ZXLCXtImX%_88yG+k7 z>l&iAv^9Z2m6a!H924LgjfRXWa-)VPNe)?GIMgV2Vu%W*@}!lot$iKF%IX}@ zF?7&<4^`CzFI;|}ftxrP>-F%Wivf2%%P4>=GI0KLUSjxU#KI6SnYO_+`6ZQ?fm@F5 z4)76F_?|+4DFN1tqLF`O7o3!|n2$I7%c8IN;X4j-OWUuW@1@Caj)Y~Yvu4T za~Oiqx;+jFb0Sm5S+AQDWFn#qTVQq5wG^4v1es8Cqt2ZrDfNBRDy4er``9{*>Rho}w7EB-$r0G9KCed+v38jtUd>#9Ui~NA$^ROVG4aE`jA$ zl~5odd%U};urqJh)s!X)P#)w1ByK zwco$$;*zREwgfUU`J|^ryrM|D&|_6HoYr z)R&l^PO2}-088Tag!+=>pE_TCiA)oGBe2a+ZhgsWR5tvFIkJs`L1QQBbtobzA!WNc z#i-m)Mx}k(0_bA_7=NUvEhJq+ia6N})lAm4>YD4`YV`oyFcmRUbz>?b*=8qAMN}Uv z1eh>ZK?#Hyf1EKDv5G~_ihmH+?M;$iiN<`0Wz}v`3x%>(&@)(VK+6QlXW}!OHFVO4 z-dV;BnAA9=fxCp2#TOoBT&UPpvLK`G2uOs%6+Tpm%9h4iYl`+B9s_gon#vEIuqN4^ za(mU*WLzaT3`bYiN1(PLlCgrN&uZTEl_7#35dB*`a9b3vgR8jQ3Ud8X8cPYDief|pbS zo1g|efM3Nu?QK8JW@eZ`mzFAwKhP*Cyh_T4EienpXt0c|vU;>C`(IgLHvQ=M*~Z>rP!H78DW>Ob*Rr^@m= zcjeKos`7|^M3Sj8OhKG9VW}T8p5n-f(ZFXE1xlq)h%Kv>74A76eEp941hKwWM@ebH);X`Ty%${ZF&`4R>}ilWUhl8r+C z+h9~iMMT(Qw`ES5nO>aVNiaOUhiwJ1>&1T$PWxp|)zl=eeq++;PYB~os5wxxQ^NOV zPLn|cRj|`3@bnc0J06d{kXPl09X(Vz^60j@EZ!{#bk^=Q8I0Bc^ny2|K^KR6y{PrZ zOA!ePysFhJ$O$*r7YNE%q)CX`C5C6ugATalefocO+}SQZ3`o4d@iM|lerHmax*t?$ z9Q@9$gG^j6`jaHj<8szVA+8kT&cu~JyP?5htlqLjL?u&L0y2oos}^F&u+(o#muq;w zVYUe8k)Hi(%n%B?s*A5tJW>GSv3{hr1%t^?%+>+?3qe+_P})y$5EV^ulF+QYMx^?> ze1=F==5D5KMh=R$ll?NHd&Zzvf;H&xzO+DEHPW|x%hQ!ciNwk}i0`@&SKNH#91?b( zGwQwP70x|?pVaAYLq>goS9Dl|aIc7{&sy1Nq-MjKpu=AU=GPG∓eYz|5P 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

n->_ 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

KJOfu2P#XxAJdH5D$v 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 0.0) { + atomicAdd(my_data_buffer.data[0], 1); + } + + if (texture(tex, vec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)).b > 0.0) { + atomicAdd(my_data_buffer.data[1], 1); + } + + if (texture(tex, vec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)).rgb == vec3(1.0, 0, 1.0)) { + atomicAdd(my_data_buffer.data[2], 1); + } +} diff --git a/materials/shader/PixelCountCompute.glsl.import b/materials/shader/PixelCountCompute.glsl.import new file mode 100644 index 0000000..ff5a600 --- /dev/null +++ b/materials/shader/PixelCountCompute.glsl.import @@ -0,0 +1,14 @@ +[remap] + +importer="glsl" +type="RDShaderFile" +uid="uid://daaysa2a1u6b7" +path="res://.godot/imported/PixelCountCompute.glsl-abe5c29fd9b584b640dd1cca2cbbc009.res" + +[deps] + +source_file="res://materials/shader/PixelCountCompute.glsl" +dest_files=["res://.godot/imported/PixelCountCompute.glsl-abe5c29fd9b584b640dd1cca2cbbc009.res"] + +[params] + diff --git a/materials/shader/WorldColoring.gdshader b/materials/shader/WorldColoring.gdshader index 77d00f2..f459811 100644 --- a/materials/shader/WorldColoring.gdshader +++ b/materials/shader/WorldColoring.gdshader @@ -16,8 +16,7 @@ void fragment() { vec3 desaturatedColor = vec3(dot(currentColor.rgb, colorToLuminance) * 0.4) + 0.1 * currentColor.rgb; - ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + currentColor.rgb * playerColorationColor.a; - + //ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + currentColor.rgb * playerColorationColor.a; ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + (playerColorationColor.rgb * 0.3 + currentColor.rgb * 0.7) * playerColorationColor.a; } diff --git a/project.godot b/project.godot index 9282402..4d6f93d 100644 --- a/project.godot +++ b/project.godot @@ -60,11 +60,15 @@ bomb_p1={ move_up_p2={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":-1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":11,"pressure":0.0,"pressed":true,"script":null) ] } move_down_p2={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":12,"pressure":0.0,"pressed":true,"script":null) ] } move_left_p2={ @@ -97,5 +101,5 @@ bomb_p2={ [rendering] -renderer/rendering_method="gl_compatibility" -renderer/rendering_method.mobile="gl_compatibility" +renderer/rendering_method="mobile" +environment/defaults/default_clear_color=Color(0.301961, 0.301961, 0.301961, 1) diff --git a/scenes/Game.tscn b/scenes/Game.tscn index 992ff5e..fc8a8bc 100644 --- a/scenes/Game.tscn +++ b/scenes/Game.tscn @@ -1,13 +1,19 @@ -[gd_scene load_steps=5 format=3 uid="uid://rd48gl8k5x34"] +[gd_scene load_steps=8 format=3 uid="uid://rd48gl8k5x34"] [ext_resource type="Script" path="res://Game.gd" id="1_7jqda"] [ext_resource type="PackedScene" uid="uid://b1nm5h3yccr16" path="res://scenes/World.tscn" id="2_voimb"] +[ext_resource type="FontFile" uid="uid://bf6q51e8x2s1h" path="res://assets/fonts/Bangers-Regular/Bangers-Regular.ttf" id="3_52dp0"] +[ext_resource type="Script" path="res://scenes/GameUI.gd" id="4_2tdl1"] [sub_resource type="World3D" id="World3D_5g233"] [sub_resource type="ViewportTexture" id="ViewportTexture_2lmj8"] viewport_path = NodePath("Viewport") +[sub_resource type="Theme" id="Theme_qtmht"] +default_font = ExtResource("3_52dp0") +default_font_size = 30 + [node name="Game" type="Node"] script = ExtResource("1_7jqda") @@ -39,28 +45,61 @@ size_flags_vertical = 4 texture = SubResource("ViewportTexture_2lmj8") stretch_mode = 6 -[node name="HSplitContainer" type="HSplitContainer" parent="."] +[node name="TopBar" type="Panel" parent="."] visible = false +custom_minimum_size = Vector2(0, 100) +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="Panel2" type="Panel" parent="."] +custom_minimum_size = Vector2(0, 80) +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 + +[node name="GameUI" type="Control" parent="."] +layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 +theme = SubResource("Theme_qtmht") +script = ExtResource("4_2tdl1") +world_path = NodePath("../Viewport/World") -[node name="WorldView" type="TextureRect" parent="HSplitContainer"] -texture_filter = 1 -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -texture = SubResource("ViewportTexture_2lmj8") -stretch_mode = 6 +[node name="Player1Widgets" type="VBoxContainer" parent="GameUI"] +layout_mode = 1 +offset_right = 49.0 +offset_bottom = 77.0 +alignment = 1 -[node name="WorldView2" type="TextureRect" parent="HSplitContainer"] -texture_filter = 1 +[node name="NameLabel" type="Label" parent="GameUI/Player1Widgets"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -texture = SubResource("ViewportTexture_2lmj8") -stretch_mode = 6 +text = "Red" + +[node name="ScoreLabel" type="Label" parent="GameUI/Player1Widgets"] +layout_mode = 2 +text = "0 +" + +[node name="Player2Widgets" type="VBoxContainer" parent="GameUI"] +layout_direction = 3 +layout_mode = 0 +offset_left = 7.0 +offset_right = 56.0 +offset_bottom = 77.0 +size_flags_horizontal = 8 +alignment = 1 + +[node name="NameLabel" type="Label" parent="GameUI/Player2Widgets"] +layout_mode = 2 +text = "Blue" + +[node name="ScoreLabel" type="Label" parent="GameUI/Player2Widgets"] +layout_mode = 2 +text = "0 +" diff --git a/scenes/GameUI.gd b/scenes/GameUI.gd new file mode 100644 index 0000000..9f3d47c --- /dev/null +++ b/scenes/GameUI.gd @@ -0,0 +1,22 @@ +extends Control + +@export var world_path : NodePath = NodePath() + +@onready var player1_score_label : Label = $'Player1Widgets/ScoreLabel' +@onready var player2_score_label : Label = $'Player2Widgets/ScoreLabel' +@onready var player2_widgets : Control = $'Player2Widgets' + +var world : World = null + +# Called when the node enters the scene tree for the first time. +func _ready(): + world = get_node(world_path) + + if world.players.size() == 1: + player2_widgets.visible = false + +func _process(_delta): + player1_score_label.text = str(world.players[0].score) + + if player2_widgets.visible: + player2_score_label.text = str(world.players[1].score) diff --git a/scenes/PixelCountComputeShader.gd b/scenes/PixelCountComputeShader.gd new file mode 100644 index 0000000..249ea02 --- /dev/null +++ b/scenes/PixelCountComputeShader.gd @@ -0,0 +1,156 @@ +# based on: +# - https://www.youtube.com/watch?v=5CKvGYqagyI +# - https://pastebin.com/wXCqk1nQ + +class_name PixelCountComputeShader extends Node + +@export var paint_viewport_path: NodePath = NodePath() + +var red_score := 0 +var blue_score := 0 +var pink_score := 0 + +var thread: Thread +var semaphore: Semaphore +var mutex: Mutex +var exit := false + +var paint_texture: ViewportTexture +var paint_viewport: Viewport + +var rd: RenderingDevice +var shader +var pipeline + +var pixel_count_result_buffer +var pixel_count_uniform + +var v_tex +var samp +var tex_uniform + +var uniform_set + +func _ready(): + paint_viewport = get_node(paint_viewport_path) + paint_texture = paint_viewport.get_texture() + + mutex = Mutex.new() + semaphore = Semaphore.new() + thread = Thread.new() + thread.start(_thread_calculate_score) + + # We will be using our own RenderingDevice to handle the compute commands + rd = RenderingServer.create_local_rendering_device() + + # Create shader and pipeline + var shader_file = load("res://materials/shader/PixelCountCompute.glsl") + var shader_spirv = shader_file.get_spirv() + shader = rd.shader_create_from_spirv(shader_spirv) + pipeline = rd.compute_pipeline_create(shader) + + var pb = PackedInt32Array([0,0,0]) + var pbb = pb.to_byte_array() + + pixel_count_result_buffer = rd.storage_buffer_create(pbb.size(), pbb) + + pixel_count_uniform = RDUniform.new() + pixel_count_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER + pixel_count_uniform.binding = 0 + pixel_count_uniform.add_id(pixel_count_result_buffer) + + var img = paint_texture.get_image() + var ta = img.get_data() + + var fmt = RDTextureFormat.new() + fmt.width = paint_texture.get_width() + fmt.height = paint_texture.get_height() + fmt.usage_bits = RenderingDevice.TEXTURE_USAGE_CAN_UPDATE_BIT | RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT + fmt.format = RenderingDevice.DATA_FORMAT_R8G8B8A8_SRGB + + v_tex = rd.texture_create(fmt, RDTextureView.new(), [ta]) + var samp_state = RDSamplerState.new() + samp_state.unnormalized_uvw = true + samp = rd.sampler_create(samp_state) + + tex_uniform = RDUniform.new() + tex_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_SAMPLER_WITH_TEXTURE + tex_uniform.binding = 1 + tex_uniform.add_id(samp) + tex_uniform.add_id(v_tex) + + uniform_set = rd.uniform_set_create([pixel_count_uniform, tex_uniform], shader, 0) + +func recalculate_score(): + await RenderingServer.frame_post_draw + semaphore.post() + +func get_blue_score() -> int: + var result := blue_score + + return result + +func get_red_score() -> int: + var result := red_score + + return result + +func _thread_calculate_score(): + while true: + semaphore.wait() + + mutex.lock() + var should_exit := exit + mutex.unlock() + + if should_exit: + break + + mutex.lock() + var image := paint_texture.get_image() + #var image := paint_viewport.get_texture() + mutex.unlock() + + var size = image.get_size() + var ta = image.get_data() + + rd.texture_update(v_tex, 0, ta) + + # Start compute list to start recording our compute commands + var compute_list = rd.compute_list_begin() + # Bind the pipeline, this tells the GPU what shader to use + rd.compute_list_bind_compute_pipeline(compute_list, pipeline) + # Binds the uniform set with the data we want to give our shader + rd.compute_list_bind_uniform_set(compute_list, uniform_set, 0) + # Dispatch 1x1x1 (XxYxZ) work groups + rd.compute_list_dispatch(compute_list, 1024/4, 1024/4, 1) + #rd.compute_list_add_barrier(compute_list) + # Tell the GPU we are done with this compute task + rd.compute_list_end() + + # Force the GPU to start our commands + rd.submit() + # Force the CPU to wait for the GPU to finish with the recorded commands + rd.sync() + + mutex.lock() + # Now we can grab our data from the storage buffer + var byte_data = rd.buffer_get_data(pixel_count_result_buffer) + var output := byte_data.to_int32_array() + + red_score = floor(output[0]/100) + blue_score = floor(output[1]/100) + pink_score = floor(output[2]/100) + + var pb = PackedInt32Array([0,0,0]) + var pbb = pb.to_byte_array() + rd.buffer_update(pixel_count_result_buffer, 0, pbb.size(), pbb) + mutex.unlock() + +func _exit_tree(): + mutex.lock() + exit = true + mutex.unlock() + + semaphore.post() + thread.wait_to_finish() diff --git a/scenes/PixelCountComputeShader.tscn b/scenes/PixelCountComputeShader.tscn new file mode 100644 index 0000000..0b1acc2 --- /dev/null +++ b/scenes/PixelCountComputeShader.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://bqgleq3w0o5wj"] + +[ext_resource type="Script" path="res://scenes/PixelCountComputeShader.gd" id="1_g7ep2"] + +[node name="PixelCountComputeShader" type="Node"] +script = ExtResource("1_g7ep2") +paint_viewport_path = NodePath("../DrawViewport") diff --git a/scenes/World.gd b/scenes/World.gd index 231fb3d..703dc82 100644 --- a/scenes/World.gd +++ b/scenes/World.gd @@ -1,27 +1,61 @@ -extends Node3D +class_name World extends Node3D + +@export var players: Array + +@onready var score_update_timer: Timer = $ScoreUpdateTimer +@onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader @onready var camera: Camera3D = $Camera3D @onready var level: Node3D = $Level @onready var world_coloring_viewport: SubViewport = $WorldColoringViewport -@onready var player1: CharacterBody3D = $Player1 -@onready var player2: CharacterBody3D = $Player2 - -var camera_offset: Vector3; +var camera_position: Vector3; var world_coloring_material: ShaderMaterial +var world_plane: Plane = Plane(Vector3.UP, Vector3.ZERO) # Called when the node enters the scene tree for the first time. func _ready(): - camera_offset = camera.global_position - player1.global_position - world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres") world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) + var player1: CharacterBody3D = $Player1 + var player2: CharacterBody3D = $Player2 + + players.append(player1) + players.append(player2) + + camera_position = camera.global_position + + score_update_timer.connect("timeout", update_score) + apply_world_coloring_recursive(level) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): - camera.global_position = player1.global_position + camera_offset + var player1 : Player = players[0] + var player_center = Vector3.ZERO + var player_coords_rect : Rect2 = Rect2( + player1.global_position.x, + player1.global_position.z, + 0, + 0, + ) + + for player: CharacterBody3D in players: + player_center += player.global_position + player_coords_rect = player_coords_rect.expand(Vector2(player.global_position.x, player.global_position.z)) + + player_center = player_center / players.size() + player_center.y = 0 + + var view_width = player_coords_rect.size.x + 10 + var view_height = player_coords_rect.size.y + 15 + var camera_dist = max (view_width, view_height) * 0.5 / sin(deg_to_rad(camera.fov) * 0.5) + + var camera_direction : Vector3 = -camera.basis.z + camera_position = player_center - camera_direction * camera_dist + + camera.global_position = camera_position pass func _physics_process(_delta): @@ -41,3 +75,11 @@ func assign_world_coloring_pass(mesh_instance: MeshInstance3D) -> void: return material.next_pass = world_coloring_material + +func update_score(): + pixel_count_compute_shader.recalculate_score() + + players[0].score = pixel_count_compute_shader.red_score + + if players.size() >= 1: + players[1].score = pixel_count_compute_shader.blue_score diff --git a/scenes/World.tscn b/scenes/World.tscn index 341b397..f878913 100644 --- a/scenes/World.tscn +++ b/scenes/World.tscn @@ -1,14 +1,22 @@ -[gd_scene load_steps=15 format=3 uid="uid://b1nm5h3yccr16"] +[gd_scene load_steps=18 format=3 uid="uid://b1nm5h3yccr16"] [ext_resource type="Script" path="res://scenes/World.gd" id="1_gtcjp"] [ext_resource type="PackedScene" uid="uid://bfyjtfdko3l7o" path="res://entities/Player.tscn" id="2_a343a"] [ext_resource type="Texture2D" uid="uid://bnsrnuuq28p4d" path="res://assets/textures/player_draw_mask.png" id="4_dipd5"] [ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="4_pseda"] [ext_resource type="Texture2D" uid="uid://vcebfpqo2ko7" path="res://assets/textures/player_bomb_mask.png" id="5_17c1g"] +[ext_resource type="PackedScene" path="res://scenes/PixelCountComputeShader.tscn" id="6_75vqy"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_5gauv"] +sky_energy_multiplier = 5.0 + +[sub_resource type="Sky" id="Sky_qfldx"] +sky_material = SubResource("ProceduralSkyMaterial_5gauv") [sub_resource type="Environment" id="Environment_f3jci"] +background_mode = 2 +sky = SubResource("Sky_qfldx") ambient_light_source = 3 -ambient_light_color = Color(0.521569, 0.521569, 0.521569, 1) ambient_light_energy = 2.64 [sub_resource type="World3D" id="World3D_s7kgt"] @@ -37,13 +45,22 @@ size = Vector3(4, 1, 0.4) [node name="World" type="Node3D"] script = ExtResource("1_gtcjp") +[node name="ScoreUpdateTimer" type="Timer" parent="."] +wait_time = 0.33 +autostart = true + +[node name="PixelCountComputeShader" parent="." instance=ExtResource("6_75vqy")] +paint_viewport_path = NodePath("../WorldColoringViewport") + [node name="Player1" parent="." instance=ExtResource("2_a343a")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.121184, 0) +color = Color(1, 0, 0, 1) coloring_sprite_path = NodePath("../WorldColoringViewport/Player1Sprite") coloring_bomb_sprite_path = NodePath("../WorldColoringViewport/Player1BombSprite") [node name="Player2" parent="." instance=ExtResource("2_a343a")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.63193, 0, 0) -color = Color(0.878431, 0, 0.980392, 1) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.121184, 0) +color = Color(0, 0, 1, 1) move_right_action = "move_right_p2" move_left_action = "move_left_p2" move_down_action = "move_down_p2" @@ -72,22 +89,30 @@ own_world_3d = true world_3d = SubResource("World3D_s7kgt") transparent_bg = true handle_input_locally = false -size = Vector2i(1000, 1000) +size = Vector2i(1024, 1024) render_target_clear_mode = 1 render_target_update_mode = 4 [node name="Player1Sprite" type="Sprite2D" parent="WorldColoringViewport"] +modulate = Color(0.117647, 0.564706, 1, 1) +position = Vector2(500, 500) texture = ExtResource("4_dipd5") [node name="Player1BombSprite" type="Sprite2D" parent="WorldColoringViewport"] visible = false +modulate = Color(0.117647, 0.564706, 1, 1) +position = Vector2(500, 500) texture = ExtResource("5_17c1g") [node name="Player2Sprite" type="Sprite2D" parent="WorldColoringViewport"] +modulate = Color(0.878431, 0, 0.980392, 1) +position = Vector2(530, 500) texture = ExtResource("4_dipd5") [node name="Player2BombSprite" type="Sprite2D" parent="WorldColoringViewport"] visible = false +modulate = Color(0.878431, 0, 0.980392, 1) +position = Vector2(530, 500) texture = ExtResource("5_17c1g") [node name="Level" type="Node3D" parent="."]