From 93c8cd4fd807ca0cfc49748ab93f537647bb47ac Mon Sep 17 00:00:00 2001 From: Benjamin Kraft Date: Sun, 19 Mar 2023 09:58:56 +0100 Subject: [PATCH] Init --- .gitignore | 2 + project.json | 6 + public/data/images/ball.png | Bin 0 -> 208984 bytes public/data/images/box.png | Bin 0 -> 318776 bytes public/data/images/favicon.ico | Bin 0 -> 318 bytes public/data/scripts/js/background.js | 138 + public/data/scripts/js/background.js.map | 1 + public/data/scripts/js/ball.js | 30 + public/data/scripts/js/ball.js.map | 1 + public/data/scripts/js/chain.js | 146 + public/data/scripts/js/chain.js.map | 1 + public/data/scripts/js/container.js | 67 + public/data/scripts/js/container.js.map | 1 + public/data/scripts/js/decoration.js | 167 + public/data/scripts/js/decoration.js.map | 1 + public/data/scripts/js/events.js | 27 + public/data/scripts/js/events.js.map | 1 + public/data/scripts/js/game.js | 219 + public/data/scripts/js/game.js.map | 1 + public/data/scripts/js/init.js | 143 + public/data/scripts/js/init.js.map | 1 + public/data/scripts/js/loader.js | 40 + public/data/scripts/js/loader.js.map | 1 + public/data/scripts/js/online.js | 9 + public/data/scripts/js/online.js.map | 1 + public/data/scripts/js/star.js | 72 + public/data/scripts/js/star.js.map | 1 + public/data/scripts/js/tree.js | 223 + public/data/scripts/js/tree.js.map | 1 + public/data/scripts/ts/background.ts | 189 + public/data/scripts/ts/ball.ts | 39 + public/data/scripts/ts/chain.ts | 167 + public/data/scripts/ts/container.ts | 84 + public/data/scripts/ts/decoration.ts | 194 + .../data/scripts/ts/definitions/p5.d/p5.d.ts | 12050 ++++++++++++++++ .../ts/definitions/p5.d/p5.global-mode.d.ts | 6423 ++++++++ public/data/scripts/ts/events.ts | 30 + public/data/scripts/ts/game.ts | 261 + public/data/scripts/ts/init.ts | 168 + public/data/scripts/ts/loader.ts | 54 + public/data/scripts/ts/online.ts | 10 + public/data/scripts/ts/star.ts | 89 + public/data/scripts/ts/tree.ts | 256 + public/data/settings/libraries.json | 7 + public/data/settings/settings.json | 202 + public/data/styles/color_picker.css | 88 + .../styles/fonts/Elronet/Elronmonospace.ttf | Bin 0 -> 31232 bytes public/data/styles/fonts/Tajawal/OFL.txt | 93 + .../styles/fonts/Tajawal/Tajawal-Black.ttf | Bin 0 -> 55160 bytes .../styles/fonts/Tajawal/Tajawal-Bold.ttf | Bin 0 -> 56044 bytes .../fonts/Tajawal/Tajawal-ExtraBold.ttf | Bin 0 -> 55732 bytes .../fonts/Tajawal/Tajawal-ExtraLight.ttf | Bin 0 -> 51884 bytes .../styles/fonts/Tajawal/Tajawal-Light.ttf | Bin 0 -> 56768 bytes .../styles/fonts/Tajawal/Tajawal-Medium.ttf | Bin 0 -> 56808 bytes .../styles/fonts/Tajawal/Tajawal-Regular.ttf | Bin 0 -> 55560 bytes public/data/styles/range_input.css | 89 + public/index.html | 67 + public/styles.css | 86 + public/thumbnail.png | Bin 0 -> 548682 bytes tsconfig.json | 9 + 60 files changed, 21956 insertions(+) create mode 100644 .gitignore create mode 100644 project.json create mode 100644 public/data/images/ball.png create mode 100644 public/data/images/box.png create mode 100644 public/data/images/favicon.ico create mode 100644 public/data/scripts/js/background.js create mode 100644 public/data/scripts/js/background.js.map create mode 100644 public/data/scripts/js/ball.js create mode 100644 public/data/scripts/js/ball.js.map create mode 100644 public/data/scripts/js/chain.js create mode 100644 public/data/scripts/js/chain.js.map create mode 100644 public/data/scripts/js/container.js create mode 100644 public/data/scripts/js/container.js.map create mode 100644 public/data/scripts/js/decoration.js create mode 100644 public/data/scripts/js/decoration.js.map create mode 100644 public/data/scripts/js/events.js create mode 100644 public/data/scripts/js/events.js.map create mode 100644 public/data/scripts/js/game.js create mode 100644 public/data/scripts/js/game.js.map create mode 100644 public/data/scripts/js/init.js create mode 100644 public/data/scripts/js/init.js.map create mode 100644 public/data/scripts/js/loader.js create mode 100644 public/data/scripts/js/loader.js.map create mode 100644 public/data/scripts/js/online.js create mode 100644 public/data/scripts/js/online.js.map create mode 100644 public/data/scripts/js/star.js create mode 100644 public/data/scripts/js/star.js.map create mode 100644 public/data/scripts/js/tree.js create mode 100644 public/data/scripts/js/tree.js.map create mode 100644 public/data/scripts/ts/background.ts create mode 100644 public/data/scripts/ts/ball.ts create mode 100644 public/data/scripts/ts/chain.ts create mode 100644 public/data/scripts/ts/container.ts create mode 100644 public/data/scripts/ts/decoration.ts create mode 100644 public/data/scripts/ts/definitions/p5.d/p5.d.ts create mode 100644 public/data/scripts/ts/definitions/p5.d/p5.global-mode.d.ts create mode 100644 public/data/scripts/ts/events.ts create mode 100644 public/data/scripts/ts/game.ts create mode 100644 public/data/scripts/ts/init.ts create mode 100644 public/data/scripts/ts/loader.ts create mode 100644 public/data/scripts/ts/online.ts create mode 100644 public/data/scripts/ts/star.ts create mode 100644 public/data/scripts/ts/tree.ts create mode 100644 public/data/settings/libraries.json create mode 100644 public/data/settings/settings.json create mode 100644 public/data/styles/color_picker.css create mode 100644 public/data/styles/fonts/Elronet/Elronmonospace.ttf create mode 100644 public/data/styles/fonts/Tajawal/OFL.txt create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-Black.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-Bold.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-ExtraBold.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-ExtraLight.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-Light.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-Medium.ttf create mode 100644 public/data/styles/fonts/Tajawal/Tajawal-Regular.ttf create mode 100644 public/data/styles/range_input.css create mode 100644 public/index.html create mode 100644 public/styles.css create mode 100644 public/thumbnail.png create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6ef218 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea + diff --git a/project.json b/project.json new file mode 100644 index 0000000..bd08150 --- /dev/null +++ b/project.json @@ -0,0 +1,6 @@ +{ + "display_name": "Christmas Tree", + "info_text": "With this little nice tool you can have fun decorating your own Christmas Trees.", + "visible": true, + "tags": ["Tool"] +} \ No newline at end of file diff --git a/public/data/images/ball.png b/public/data/images/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..106fbd89c73908f864167121a0f732054cc8e9fe GIT binary patch literal 208984 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

ACoB=2H;d|7?`O&*`W`G^;ZPl~uG*c) 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%0D!5LzgZR{Jmo{>_mmZ0{ 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

`*2TVh{n-bxh4A%{AGA&6OF)%a+Y7!SKXlSaUi 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

oyIlv6_Ia9ugI~Q_DS)LgM4c zk1IZql4f=PtnEsnMR66|@$>rndSmOb4Qp)I#_d|!%0*iQk;go@aru{)4^E_9@%(}%--%sPUtfl49T$D92qe*sl2!YzZrt2Fn)?wr5E{l3Bty;)!>r99> z`kPX!Yt+`(gE&L$mJh`J4#0Nq@H6A*C*^W4TR*QGuFqzFV>IwyK~$|rl&ZmY zO<`SaevZ}}vE1~|banCN0TM#D3OK4nK_P0-GRBC$$a7oBktgC7;@n1%JLiZKAc=rF z&odsL9#;#Z*gT9ap>Esm*-nmozq4LQ@Wlx8EdtZ>1=u9WOLxk3PSS*x7sN`54tUvzv1G=um;c&oyzpw9SEw$tR z@Q42k!!T6WMy)k=yB=Lf3+lte1Dq#xB;|l{x)fsDSigs$&yq4FNXL}n{Djl#gxzje zi^jHB&c)Wt%j+sZSV{$JsUXo>*^E&`96q* z-t^c%?65lwwP@@H%2wiBl-UPz?(~IovLBFhkKHc9Ia1Aaoq?1ZF^Z;Trz#Pa(_wRt z`26yUlq0O^@bGv*XM6NRDYzsc1v%WtqS9iAE#90)AMcL!m3m7olE+-E%(E0gLT#P3 z?aRLJZ#LHU`P6of*0@~HH30J-x8mmyKW&hlW@Ar4-|ygEtVG@xrPW$jHPE);YFmig zMZTTO{8_eWa3z>xcb9L&#o#o#73YXK5w*>x`_)_~R4!J&oYu02$kBU?l|dM*8JExI zYp%^a&-n1+<7$&`jm9LYN$Z&6`_hUQmVuG(tZS*R(Jd0(A_812ZPzLO@BRDtcgfw$ z&&16kaovWz#gp`IO6YQ{EW0)(GAsrlmJ)j6uwC)lcIa&=Se+6%pQhJnjxa^2k%JAFlPAi1~Km z-4;Dxl1{c`VEcFc;6k_`2meLV@Mclmo?Q3@)WY>Gd6i*2?xD`}SpR*yQ1GI>-|y?d zV?M+KYJSh(|Ni%@1?*bLl`Xf47qs^IRisD~Y|o1; z7g+D!y<44>Q%czH_jr1Gs&eLOnka~F(;jFSEhe}!NiBqcN>Z36drW+Z{m6xou#i8q((_~g*IwxHUc4)2{v?|EEo(SaBv zv^8Hyyj3eNmikAoHzjT#ZVB8iin`^I@px!kw0zIoLRxE$r>CdYiG7xk|~p#@3U>8t!(v`x|u6ChnP~VpxG;OX`h9hD5jyd3qASG zfZ{9wKxqrpSv)^KS8iQOsjOL`1D2qu4@d!HmdI6p001BWNklSyu+4?Q=g*(<)w?JBGLAT%PBF$O>V^Z_rQKjWKkzOEYqt7W36)Ba!n^4CgC_TJ-gIN;}> z|6V5pSCY23bV8P*b5HX9`}gFFGSASKNWhoNr6MlvrttjyTnjILR!orAT4Q!Zta{!^ z2&ZYPL10?ziiEU1bFDRg_~D0@=^7K4c~SrAr=M^*9I82*_rCtyuIupe#x7Y+qZ9Ft*!TU97lZq{29t<*k%){&X9tv`(IvPa6BFO-n z=<*)yX~g4-ui<$czTRz*#W)gL*L8S&d|Z+0KYjZ2MPe=&p)Jp73#spRyVW({ICmqilzZF;O39b;WXh(qY{a}) zv@P!TAjRX8JU3jiFKAEE%xQ9~)@Qqk@dia^nzw7t=^xNgF-AV{T5ki<>NW0 za;<8G?zC$F-zyEJ=G2r?6E&lq~zvAifc{$*Pgm1t77RU3rAV1rlaEuY1 zHup1fN`IO^L`yQvWpSg4BWs_oU65j2lm}aAi8m5LM*Q7=C(8_ZGHrPtJX!xcSIhO} zlXuc9zx>};P18cG{GcBm9?I#MiXz*PRJ*Rj>Gg=`=jS@exXr=~2QNO{n{8D)F-H91 z4}ZYhw{P+M{9M%?$Kw&Z-42hBkCpJm8wHa)`@V+UEEK+ zUau97yOv4Fzt>8HNqRo4AX0A6@aFLT{rj5uNiCw?O6l|N-8)<^7ref{;`8Uvw7~W~ zcDo(+`+bdX=lj7Ek$?Z&Z@;ZAoe)AT1Y?Z!dP=VDuPMdkZnvwP9)@lI{O3Q{!m>@r zz6XJ~h%PaXz2x{b&CcCJrk_1krh%R*N*>cfQWn z=j1+Wx`di3O<$!Vk8UA>>t%#gP|H>j^KO7(w zprwJ-qMCylX-Wh^xZ#Smef5?^-kwr9@U!o9JxQlb>C;S{6*A+iufD1(wU(gCgj!?? zV-82TciSRq(XeIA ztP#1YXiK7Q-n3!krUjJ}S>^NGTD`82`QUmw z9r5AAj1;Mb$}Zi!4lj``e#KARD#qGgm^b;h1P4e zRtFv)A2IBD=yJH$+MvY$5Fcm1tLqRX`FhdXRbn-oxgSD+ReCundbf-RWgwM9ZaFKo zLCXr^$ziu)aF&O9*QvrvQbTOK`~8JaXHK@N#ON*#kb#nTVHP& zhPyrnOw^m_xk@P+Az=sARvOK19W0lOq4Y(5yr1Xt(G z>+uCbNAMPuu` zvqfpNwqj1HC z-AogHb^mEqa$A*8%gL;~mEcz>n!7HC)fO;lQ94EgQ%X=)t4y+7l&YAjNe445-X~Tmq>UpVZ%%FRkZ%y55byQ!thJagBZf{R<)u1iUO)%| zrjv9Ex{+mx8{Wz-(voiqpY4DN!QUtqwx(7zh{}C!PQ4)n^d%dId+q!l4A=1@*nVwK z?)&|K#byo}Qj4ucH)2+(zTp4x7yJfIOei)$w!~h8tPkk3arc+gtpsPp4D$ zSD4(4!{LDE=eNZzlPs`bUXF;-P)5%7emE?IGXT*4h_XKl)`|bBg zDZsga7{|IO)8Z&`I2@{@D;I08udfw>Fvj5N>8Ywplv3F5_tk&qmroz+Jz>3n+xus= z22aex;ZOoFtv5Q;zT2sH+DLT5LJC44 z=wO4@{rYlob;nkrx0P(0L6H9JB4S9$NYKh4BUPkGfD*H%q|;qal<_4c{eB1$A$p1x zDM*u$h1wxxK_(W2LRGGUTCFP!3Sb}vlQcDbW<$ju&2#3Rm|8@IVBkH;hpEkxzvwd} zrLM&Qe=h`W#$3dd}Mb;_CoUUQDsNtTf>B@L7o72#r|uvS`5xi^GtQL&b8J&B+;Y8kcpd{oRSL9fT| zwrsHHi&M1i`hvt3lt-B=WtKT%zw05v^Z`*#;rNhRTkTp@4%zR1_Z2!zYtyGspX$Nf z7=vjZYnP(!5K#P$1H{roCtAYP7?0Wt6!7c$vL`l0ikS{$iI=3>3LAHOAod`Wc7az9MP1&<=9WxLihx_32de%-SHsT9t{rQo`+K zZLO^*aUyZfFuh$a=5)rsMLeuUXb=nLL9{*D7%4}kt+=;DAMVwC`uP`h<^ienPlSL_b(OJ-)$i-{X3jAWJH&kh%I{1W$eBhleK^qlzs#nQF!8 z>35Vs-|sMvR74z)FPLY)GL1rxbu2I$l?$uB@9Q5S1Wu<@MOsd$6D^|2uPm+GRts}8 zTA!A-#V2J+idM_XtQ|KkoH_@;Lh0biAT6hWlmd)V#gxn;1Xsr+zu&S5>LO7t1Uf;B zHf4QK%5X-cg*`JlFV{b;=3`0!Gj<b+ULhX-0;wYb9Vy$aBusXSXHB^Ww#afEH2VO+DubW4fYzLPY?0^QY(qQGbs% zaWbrxEuT`?uaq#&|2A6nR!KKh8~=eM=!;^){FZOkdUQ5qFwWg*RO zNyb#v1vf86P=k!|y5{`CLu_dZIWK-#BBvDzwza3=^~Aea*7Ag>rzZp-@#jDP8Grf9 zC;aQbep`RqbEj^3eIdph&oAaHa*@PedCy*>S-I{VEvc9H zw*7vOIHncfN|b%BZT%~yU`nkpO%rknp;gjUX{!Bs9_)O>Lvi|RofF9z&8{SgTllZ-Vb5|QxLQl(*{6pc zLJF%kP~RD(SfIKj?jkE&oq5jbt^wAU)I#^*xh)*e#7eD8=vf1~jpGP6&9x9{oq@gg zH8HeBl-g>W-Cnup=$ympbgFW_Eq`X^hfzMmn>TN20m6g0z5eIt=PLhfEt=`IEiTvT z#uRNVWb2O~KUNM3^N_eo&uN196941>{(sT+%LHLmg9`?0ua(O(3`6xN;MC)P{M~QS z^#;4$u11X?k4K!(XB>~m)xBaVE2AvVIsEm9|H6L1udmOD6dTRGdGlt)rPw+WOQTk% zW%oEMZ7;rc6HX~q=)5fu85wEGw%Y=ei{$G()@RAr|7#vXTM6RjdS014Z4JB*5Bqu; zX}L!^XFvjP-@hs8AVT5xKNosEDDBkr9*j_i|M&(*2gTg}@2w0uo(k;k~T< zJ^CE7v}{n7mO!fRq-0|b2%%xEYzkm~vkq4@)+|>4fPhpPLh1#v5*Y#l+Hl5-Ea-!3 z?n%2&#)_PCv2r7?%@W?nN*xHn!TW-kl;+~31;}s;T3WR>V z)M7JIyyR`M!Z6R4sotI{(U`Vrt+C(lF@|$ZZ05y=ek)^E{&;4omF26n7!aEs7xI?V`Tz3EnfeY8Usdymy+Wn&07^gJ~B0aU5Y3 zDL!6aUaBmXH{I9Q*Si}`>nk$PBVJx!RxErT_^jCBd)O)k_C%i+}(3f3MG#^L(m{ucXRbiegVK zfWFh{?11Md0jYpbAAf`B>*Nk=arvNPFN9wxlQNhvPR?tAtfFkpKs>Pw(Yn@)>>Z8G+kGP z)M867R&C5BKdH@dN>HK@vp4M{$_5fRoi8_>Npubapl3KrH#lY=dXR6a8nOAC{ zm@||hNLOo3DaWD>Es|A1A5(sS_DmSu17bJ_FcF$K~8Rhn@7ap5dxhUvY-rtmVL}~FC|(`WKEh(Uo?%o zH{rMF#mZzyOT2yi7VqD`B^l{>hE?Pa$%`&8)NMh*aR!IOp}MPXZT8y%$WUWDI9j{> z_B6_yCCkuS<~>)otVH3>iqU~~!>1FM!k_;1r`p#fV(Xy}b}m-Eceq|Jbz*S!&TT9q zbA_+9)-YBTcrfF7nP58&rG`T6B$zw~0Fhwem`KCVMGm7Ati)-vDR=_5EkiEG*#N9P z!L%p2wqQ_-3Z&~i))RWp@ou)#m%;?41X3V$1xX+wLQ8||biwg>#AQ6=?eja#euAF^ zATxS9KwHj-5qNs~Es#?|M{^<7qJEucR}=uEET*K&(Aq%i(qGQu?uktZfxrIsuayJF zg>-A|_V(>tXuE{1wM6bMoZPm^Qc5%-1M2g3o)EJT9XdN;*mZETgOIt}+Z!`f0x(2c z!Q5YJSGOn0t!E28YhAcdx)NRMTA-I0iRI_2AT^rO+?%jDM1dGMLnuHMV@g#d=UUqp zisdHvs}8VR50+N()wY9|WaeT78orDUDlQKYw&n-cDdB0q3{OM0#$>Vd5RatUlHQxjowww(XkJPqN3;?3nRfdDvF?)x6{d@lW z`U2Z`fYhtt#9FM(^Ngp5fr^3{Fmyfntu&|WHc@pRCmi+z&aWqg6wyB(aCS4oJY)Ct zgvZ$-CxP?nio=eaL4}eebJPOo%LPww9`W+>f_))Ny5KR*9=rV>w%^f%VCJ(V?}}l+ z!+E@*-wkkKhW8E<35VXm^*v|Cz$>Lkd)KmyvM`CBhD|MaCq1u7v?(ooDAp( zi_c)>H<+w`O?RuJ=*66A}P)Z@V2w?ca$p?6Nc(}1W zZx{TxZ=d1(w5U|1fND;oecu(-#Vj5&(ZTrwA4^%4S&$jZ6k>DXSmYCvgcnFTf!bC3 zhXeKxhfNxFKn#VG(`oGX{Y}2iGO;D3GL@&1L#$kt05YZ$QWlH-gub`f?GA;fuq=Wy zQ)|gLt+Eg!=HeT(@CST-9{gDz9``G9Ec0DjUxBtCzFzoBynAT_v}So+jO`Bl!Z#XM zUOE)SnK8{*@=b{uqnjYJfbI;8$;dh*AtEBdM~8W)7Ff6I@vu9fA38`$<5Pe(LrR$z zrM2Mz*;P&u6O}`7h(19jRok@O_Tu7=ktbGX8DkKALXIV2RsjJ4su+H?c}P-91Q{`b z$k#Ef(~7k;Kygkzo?a1CfYBBqdidy&ksuVHjKZPoka9$dnZBlg98*>J^}7K+=2}R0 zU5Bp7zpvM8c~%M;0wE@ZOtRD{GJNoOczCFONyaGj{jP9=L}{^htAITwgx9Q?Hh?Y* z2$f-bT{h#zjIoVc;B|JMXV}hGw95H~q{y5pRt#OIu`1n${cb^+!x|-4T0*ak--rh> zP2-KtgH{S!rD9(%kU3qF(ypY*w|%61fN!BYn|zvwP{|~+Hyd5 z;RGQRA#W+;TGW<|YGYMF0Aaj{JB9pA!%@Eq4A398a z!v1lOPoI8))a2r7t%VCSAnAKZfy+3-7z-aFhMmUjJcQKnIYHYFx*w3F1hj$fBtiyu z508ajO?)z0Xf9GO`}wC&FU?_1!#Q%D%>sxyAmo6{c*YzY&f}Soj>iL((f=P|Z?bGj za%71eo80g8#+VYQVxd7{Em=D*`2Qck4TaStMJR;^8d*SQWW3=HKG?v8nwqPb`$MNl zN)8e6?sa!_Gu5MKpp@?^Vw@)I`U5)KW8WX}|~h<++n`A2`eE<-&JhGoFzhxbNE)H7e-A;~U9g2gExRzK6kc9lD&7VYo{F4qBiWZtl;kE$62)ax z7>5}?Tnc%Z4{5FY>ict-&6~PR6`p5b{#@TLNET%W(ZTuo^Jg57N0A@oF=i;4jEr`b z!BFM3kh4i73e|R+K1>xqL?T?gQ7#FquKKk(1pMLKH(ZBXIrR5?`aaC9Ii8L=w%|~? z*0P$X>n&79{JPLr88Egd&lj1~Bn|bHF%+j>EWUN6gjUtiwQ zbq>3XI<*lP>}S*lVH#`E0qBj}L_hdvIOlLY9*YD%gizFf*XtEpQD@Gknf#okpAkO; z9)VV4>f0@=ZD#lws1Vfouup`<`WP_04;ZEqMrrI0dwl!$4La|?A^6N=2mm;g)IsZ` z*c%t#h}-~~L1w`b#4eE1#Cu9hrDU z76A!S{Eht2!1vi0#1QBm6?`x*(5v_hfzByI|1WYA&C>#BsfcidBE{@Kqmo`E{+S~b zbU;*k6~x&_TkyVp8LsF$TJOqeOyii*n4 zb82s^&F5l;U4~;^#vs(8&;}(#F1N^B(#T1gs4;n4@++jV9{)KuOOjGRc6`-Z7n^1Y z^~=wDdwVP2hYjC&4xdtjO}e<_%J0ti=W;)%$$Wv#{c@84m&r4VG^3y-^`!4q{Y zlaLvw9Qqfk)NwgqetmtdV1Mqkc|AX#j^&xknY0{rv?D}mASI0qrMaQZ*=fnarAy67 zh86~l?OJ00ApX8Q8f5dsNq?2m_X2=f}{_cV&IQ+_8(C}B#N zCSOdsq~h*+z2fENrR+`8g<0~_obAgs$@|Bj$r68=>m}E_+@s4d6{)>m-^m~3 zbUFxgHU;kkVjMn91U9DT^u52oueccUV3q}!+{+d|SJ>p}$cPdy(zsYDhjr4po^P4Y z;wxe?7b~tKWEf>Ew)p>~&{tkH3qq5s{gzD^s|GY_0s)k%8i6`hJyrkRDshdq@bk1f zGbDn&_>L_J%92|s_ua}*#pnv*k|GUR{I!+?r0B^xbJ`%8<()~QP${EBBy`3?Bf*ao z=5c~L?qRjYnCTj3!<^M_5%RjOBO^Blg8%>^07*naRN^Ug^%DB%vyX|*sfcq%NQ6tR z*nnw~=;FM|3(4g!^l;df&aUr!yuO60JF{-tTv_|i&Z^#@s(EbTbff?nGO%k2kaEMB z=3%voFybSNAX&jL9ptvsB8r!eA8yxKxQxSvm=Cbz{vm-%ZYpv?@ISl$P!XwQF~TDa z$rX|O7Uvv(hY+(2ErmMpP8?3W*|0*14-xLpnE@|5Kv`Td zV!&zxce+1f&Z8jd-yq*F$rIsc!)U?X;jU5v$nP&@(k(HVXYtqT6+VU{ z29P|gHZO~dO&OT#Twk6of3Lf{yK;R}4!?zdBB_e2BRhYYttC;VVjyWPrd+s6yZ_ey z;G<>+0QS3MxwckxAl;6 zGK43&b63rxD^Q00wn5v^O5V2jSRJT4hb$-mBpdy8mE z2VQx1vbDXn61BySS!Lm*}{ z6)GPE3zp(%sAXQfG4jk_5=L2CMy|QK9O~^xhWvA0US8ljlO?+z$#qqSHe7}V7PZx8 zC^wU>zuw>9D$Y#FZOY$?awdGqeqbB`jkE#%`0+y!+EOV1vZo)3{rfP%UqG@_ETaY{~VQ3u4le3}alRajgq8lY+Jjt>+vQe|f)V`E7*PbN zlO*-l`7$%CQLB0XmU-bv8{IVdDul4jX5r49jRa+G6`SVqvz47Mf7aXETlKu9_ltRe%x z4aCCFdVdIrTH5_CH#$r9_+>_IVq=VfHVgbbPqA{y;|pf(IcJ}+HSZy_*I7!{LQJxX zkD-}?rnpMwm7OaWO|qhw--&N>i4_mq9yGF8d47H_qlD{KZ0d%-)9lA0m)nj&537YJ z4;{|%sTPY^Q0(d|3kKP-9#5z0fLV$RDrmla`<8!ASBrC=0>Q2q{NIOazraJ=&l+__i-PZ)#gH>@~z{ zN~TW= zm&>I{z@_I+*L8S!qL>2Cppx)#j1fQm^ix6g+AdBhh1d5>;bpXcR(iY0XCe#V6m{j! z+$MyVwA!qMlafwaKcA|UY>A3+5h+R8@-Uz08DGEtR6bXJe=erD$dmAUHP%R~Dgfn3 zto7)z*5dB&4o^={`1b7^=6S~Pa93S-O9+<;nM7X;(xTN$F(dyRs}W@?uMB%NDj|hf z8HmaEixIcB;NwwV$sXFwtwQy_%J*}5X7&G*d@MdtTi(awDsFIjyOyYc$hlAC{8x(B zWncDCQ9xmc-vWAv&(X(Iz90>5=;v?v_E zm$fgEE%#>Y^CZ~Nt_iu`%044ev-~be3kjtZQmhlrl~%CEVj6Db)@;cE|N4FgQo_T- z1C;A1r^(Nlr=dhHRK-e)St2})*y|o$%STWeN(2!ul2i|^>!|qF*h;CTxS2+>BfebT ztC{NIa44`M-^5`U5KhZHT0)E|nN`(2O*6W^fV@$gYO%9kEB|X}|FQ_EHwIqg!E?Is7q-SwvY6TB7<74! zd_ZwH;JO%6mGyg{iPDU6ak}jN{XM3sE2EW<7Pst><-z)||N5_0*Cj3Ewa4{nJ7hKS`@?_q?c5YWT&X&N(MKck8uhoIY-{JNBjKkr8)9GtQgs$bjJUl$$ z{rpxC6Lu%2PQC-M#2vJOZu}l_goQ*MJKPvlXfA(0XJMR0oKe|}%c7eP zdx^yH|6fpDS2#p`zhsfm(szD_EqCv7xl|@*TnzEGaDgOwG~CTn^Oq_#xkUl*@9(RW zbS@bA8BC*J5T|BTX^g?2{`99RO_{Hqn}Ke>TP!IuA0>e@k2DN^dVaz7oBWSGMbJ@?TrcVgtJpe`lRs)D0 zex~>Huy;MKhrg-EkFL!QDGUw9-$9`Bd{f1Cdm3veRiduPt&p|0NBf`2CZ=#zA{> zoK|s){8+vpr(?5~_wjhFMzoR$%6j5&T5rp>Nc2?}4syNhcDuzD7JyC* z8nX2{+)y2l$Fip}LNiSh6igX|N|HF=vw!=yf2&Xveun@+J4ymZQz*zipVfrN%DlDbTh4FMr6*KrUQ2g`R~!cEDag;KO-p}Yjs-u_`K`c@+>rw|`C zAFabP?|JPglT}FkPVm|=&aQ~V5?Pb?R3a;EP{(J99Q)BV2wse!T_7e*VZv#Dz~?7Q zx`E%R$PEll)WWa$xbi z9Eec)U{9Y!<(X%q8+vQYP*(EZ; zlgB*LfmU{Q(wS6BZ&{Udxm=cnZDG2`s-M69^{?3P_r(&QuZgdbCGT9^NT`(&7k){1 zyB+TC?n=7yG)?efs_w5mDC7u?F$PXsgvn#) zI{Ytx{GXeVA%GN$vn?NDGOUviKA!(_Dm1M@RRX_mw_CYZb{^gD_xSwzb5^Z%%ewJF zz}2-gwB+>2!=ep9<8D<$VIHSNCan#+0~KGLb%=i90I8H+3rNUWx$~x!(2IO3MkU(u zRogwD1P80-c1**7$BazO^NbY9H8pYpniAsdF%Khj%F^wa$kHIvuXTp@K0hu*Z<}3b z2`#a!@sTVHIh8kNdxu%@HmLCL%KDaLAL+^RkxGy=xms%l=~^m7>7+9%$cGU7{l0P* z=R>%a`pa&-L~ra5Fkq?bGJcXo&dcSpA{hn{VZT3?d%|O8h{AIi z20T7K!We_|`HbG^vd6M526GGf-k;BB>~}P#?;QEDefjbQuP?tXfvy7SW^Xp>jIVb+ zUVr{8e)-S8;h+BLpAbSQGJUNz^zMki|Mh1a@9t}lpk>jdYG&I)lhh$)DP>Fui8hyM zj^!ZP%FtE&`kng{GUTWxscDw!9k$OEFl zC4A^q%il-BXR_Me`fKH)m?6{C>6EMQ8O~(ih?vS~LqcZ~65LA3-Qu=L9}UTK;R8-u zDD%NkI70$C;3AHFR^$kVM*vG_Yhg{7f0n5_7fF_s8!sQW^E~6_<)vI3A2zM~t8)%d zPfwL(c8M9_BE(l?As!9#J^SgWpH{L_{%+oTXj7BUwlbe2$L8_zkqnG7IeFKg8V`*H z)iG9yS#j7xXr0P4W^NSUQ+CE|NpKQnlN-5I z70LO2OQ@6YZxGUZe$EoIW@Lkl8*WDUuhV{y(algXky~s`m}3A!EX6}aqR>Z0A%jsX z`u_@0qEL~=6tA=I-@jMLqvS6TTD7YT0guPyN_s5|*|lguuY%%QwTnb5B#(-Uhg!A6 zf3rf35`V)gc7*T0R(54r*t*qzB%M}Dk+U~yuML*=GqNHJRVg91ntZL2NE&ZHhY8|a zqbjq)P+?zmt96!}Zh@4bupvD3w`jlmI^G z98%|tw-_V${G9oExd912RAX{$Ewsx9Y`Kw>oFi$WAm2|}^d)g_$ak6xed!>*j%L7z zDkHfUa6z`q78m?^d@jn7vE0Lp6@w>ZPg2fpphtPE`S$jPr>7@8KR?6uJ^VD`_4OSO zy36Y-73bcnSdk2DItcVCvmxftt#KR?Gwgi}0f$3}X}WDnsN?}#iXr1x;~NR%%78mL z0^#2~qyRjS{4tC-+#R2Z-!jdB?uyS!2mt}Af}pK7Ikc>X)>^et`(l*))X3!IX3xL( zdc9`%T8nueG35@<2jU~7AkBbSBD@rIvXZT={PU(Xj&n83lo8>q+>u4lFbq}D;Vim% zmL;=QG`~PH2&}wtDv%AjG4NhhPO+>!T3icJ%|m6^CLL2-*1B^J&(F^*f|>kT(=?RP zlk6t>nt%TJ=kjM*LM<)!$;?S@CVERh774}f_vG+=xm@t`U;bW-TK*nNGqh=8bN*E< z&s0c)5y)y93Q8L!>kzsgIy(fPGWoeB4<7f2^1O%XR?Uvf%(;>BGr6%n_`2S0B3k@e zfBfSgR|LFDMvQIAX$%qLG^4Xr>_i{RS})%#MZCS85n_bSz7g!>p_PIj451$>l~iZV z?;SsD-I4Mq7u2#Fm&gJkI)v;X655ec!r*U}+Dh_CnCuJ@R+s6QdGk$}GvczvHK0Je zxKd^*uzx%d1lrIBReJC7`ubWS2eL2^Az;5dR%n6bAFxjl|19~O%V;ju$`ZMLWLyR9 zXGEqA-jfVfYj}{Vt>v2Vy}0Ep9R3c47|q#CYHidgDFbqCZ#9X1->p01-hsG?tt$vulV$J!0&elAjdWQ`0)eByN60yYIE~sc0eZ4o(J)s5`@Wzl4sa4)VPFXuNX^_2>a{E!&pk5;2|;-N@G z9b;g$D)|j96Z)g@unIBK8bH_#+LEcuU2n5J{{)@#!cEyz#&w%!Qv5=5YIEygyPzsv zrN?h8UCB36N)_TVFDAAo=g|S99E^C$B0?6K!AAr?=UM-V_xJZwQ1178+~405{3(#M zEpCq7j9O`;N%k{ldneg{)i)8uid1INUfPeXyf2q*G z1@)PPzl@Zp*8B@UkFZu3!YZSI+#UV>?|(1fg*{`qp!DA3a=TV}R?_o>N1l=oAP+_W z=yzRJZ1J;`&XQYp==^T>S+*%XQe^&&G$Ct!NLYFbtzeWUM_EPLCK?LR3a7&nN#%mh zXlN*M=$t*0uAj9GN|T7#mVA3zD_vztz{n846D>!kEj%Pyv*j8{Z<2P5QwsS10fCeW z&a8G~gsR;CZoeuLBs%;4{=R7#xm<&({=7tA+2l|be^ovfa^TtrDl|FDXhUg{i%&xC z;tEOT&tOlYk4WUxG*)OuOB5>_Z9~T=)@LpZO?p%(Mp{qtBc)-c{pEr4nL@ zutt-OzCfcTC#*FpM2cmf4JlU5CcW=%RuWcYP%5C;Qwd43-jWx8v{qXYi8Nr90gEzQ zE-4MIRe86$7_G+WJdFtoF}d1UGrx1^cQQ{@&f$_>r00-ej6>h;U|o;hAwt`JDOTic zlV@doV=D70rQtFmHKqV#=K5x0Z7#J1v$tkee9^o?%NaRu#(YC$HQIF@<{JuGv?7%< zp(tSmDXwDAn=Y}H0#<=n%}ccP7n@&^B4>s{{+TIDR72d94$5n9=k)Tg-A-4AQoNx_ z`Kxp-y}!S&L(%dQiTbCvQXmZbbo)p zX?)d=B`TYBu}&Ty9#(`=MnqZ&b*rF!{`9z#R?8RmcDt>JyHXYR`ubWpE3|nIi*g1_ znldM`)*Ej^-z_eyET87XiBqwe(xrAEU2m)XnD;2YH=ajU(}X!{csNlYX+RnH1Sn(C^?M)!ukXZjdU$xE z|Gz)vqJ@gZIvXekXzR+nQ3KFAzrA>lfb}Ck~v}>AI zGjG}XJv}{bj;9v5*{me5lAtV|U8TQ4A#3Hsq)nsM+Ezwo>|k5EJ45+K^E_j>>+tya zSU5Ph+pV(1=Z%(w{N&~@!!cV0jx1Ew0c4e#&og{#4e9$9p(JQkXfQ(G8FH{O;2X;r-`RuK##;`RKx zI*hq+3?U%Gz&KlFdCB6E*IR32&hPB&>-*-xD2*1SN~e`^YPCHkZq2k>WidmixKp@ZHTt`VT^&6#CrRF1qRuosZIIqL-O324?L3Pmz8JsorbG~ChtBpTOpP|Hsp>SWJ2ab45(SIGw{PEy z*92daL?L7cC;dYBTIVoT^I<9HEarucBz1Wg^XMxrzs6`P|MPr4S9}OLUStbwc|b^Y z4|^lE-XhXo{?H!^uZQnhDW*fj>2O@-#+0TiML@d}8!rn|*%7v#buGWPo7_5y;7KlB zyGgf_(e_=D${6XHQL=J2oNMLJWd~s0~WB6e5M;`G7fi z7^PvI!!(RUa85L?OLEyJzh7}`WRRzIx}c6*A$OAV))td=9~5F@ z#E%+naxbTdKc(5SB5f$OEFSJ2D0D9u>?zX%pc5q&tGu5m8Xxl*C`Mqs-m0+EHqwI| zF*Z;n^^ebr#)vSd3bAOPpF}z3x~{T=1mY)SCgy3$8{3jJ15_-ug?zg{W%I-PpB!;X z71`FBFJZZ2;<9`XBHtS8@X!D92Xy-#-Y;i#yFFajSEjQe1d<)EvVr_UIGd*dI%yyU zq-23C!Ba6Ju&gQ0z-#{UVS;lx=`lrgmJUB?P0aJ?5dtyDS=Lx}8@e7hm4j-IIqKdB z7z|ldKhPgDy!yHaSm2p2onTNlOTE-ow3l?AO%Vb)*$0Es||)}MD&47(0ssc9DtZ$ zJ5$CvWX7dSC>tST8qW1Ok=X!Cif4C=&Z~gnegs& z(5SZA&6M^kG7F4INx}Om=lm^dI%B)d@sK2mw`hz+0rt*em}dBCLSorm!PQN#&=&RS?|Nq#E|`F5&%ge^QLM>O7C05he@ut%WWy1Q|%UR ztwo58a^=0l7$DWgmpXA%D3o(PLhFcWoU!Zo!n4c6xg&kXXz<(1Yra-hQkhH0pIRb7 z_%qwUSep`^rNW;{UNakrDnvTNqX$yRgDnN4oETBBeQacSE-Rt9u;xM(L1UT+#H0|} z79nRF+0H;mN^geGqrViOVnE8HxW4c4(@(#Lvj*pv_d@DE->x_uPE;f(N&|oT{5w^O zm2n)g?;T?D&{1I?MtuGHdCB;&7J$L`?>}%l9I@LSa5=x?=fD0Z{`ddwf5l(_<5ztC z=@YKI1AhMNUq)U=Gynh~07*naRPgoN@2FCD#yjd#pC`C!D~pmI`E4ROK(@`5j#M#f~g*Nu@8cRc8+9e0JPu?#29h8UU9x$YG^l; z>J)>wN1HbYEkDGJwq$Y*G}MZo36p2q_|^ z40~!i*vaRm!zr5(7Q|0487QCnPgOyCI2~}(rxF2SnUO=t7zNwetOQ92 zDL@;Gu5-BEMkobXV{y9Qqwn{nmo>=x$GbyuXJ(SK!>3>X72*AaX&SPZQU?T5uIzR@Qh)Y69v<%LoJu2%x!`a(;Qsy| z-@kvye&6Hn?hfbM8PCtpxD6weHrVZY7~3I1<8=3cak|0vJKV+r+8WqIjg=1xP@IDn zVV%SAK;zn%--rfrI_}8=0TE6c%)<=`9##Pc3A??+cDn(dha&}K3K3wWy zorVt+b_YV3opTuG3A@7y~luXe!s&nzx)l?^BKw01>epWy!`qd=kpogzM>?gGC_$}6v^PUHc$o13{Vvi!V#Gj3EyTD7daiw?9F-4iPphWe5UPF+rtefkvyKJwYQ&CnBI= zLkI})Dy}zHU>uNU=-b{G3moh0aWhF)6=cABid24+_h)zibNI($P2@X14`O!Q0S_N-l=G3TFQyNF%r;HNC@O!ag3 zF+lr;zmf7+i*V)S@%JtKMs7ja1-{t=P)Yt}a@f`uJaXju26IP~<1zp(4t_hK$eez+l#2#*l zsx22TZ!$*Hp}=EKXV*!^;{Bbb2`Z23CFKF*R^_m>d7ks;GA}9!gQ8(4xf-B!Dwzgy4&OqgCE-^jC-0DpFfAkSS;(6aK9Y8w0RiiIr#vU$dyzZy;5~JXDb`)U~3}j zWZkAZVcA^g;)beHB2|T02h%hOQ=~+2zxb~Ep41qUnA+Ztb|YF2jgWm^YMH2fkM8g9 zi(iLyp}f1h%kG=k@*c75nJw=b8It5xS&$drg;FI|7^3VizbD(5SN7pdzKe}4HSY^X zQOH^Hp{P)_%QEBH<2s*lR)EnR#o*MbuFm@;#NPm|Xu`s7PIVwf`;7+e|`~*+yj@r0}6VyA0546)dG_&jqR6gJi?97!Wqd ziq?oq;m6x+S-)GV&#iDm`F=Vv({pWL*cj- ztS}{bE-1^pnAfkdMcoK-FDjK!8Ii{7y<$gcj&wNQ-DCEiZ~+l3z%H{~0JLMZawefR zXsq{$)HuQ0iiZ^=84spBrq-_JqVau|{#jc^YazPlbw#|N#R)maNaO8>=cTnqoR_^k zA;5du(;pu0a5|mxbBTrQpG4tgKa$=`!A0l2QI#qpq-`cU z9XMvm8){M{rRBG@VeWO0gsB{2+(ov2EiwUAc02Nc8&jvOaw2X!N9DYOl&}hz+A3BI zR2{VrX_p@fl2!@h6iR^r5ezBipC5U^a7Qdne%h2>CXRM)sM1CWc>#`hr=o~z1M4^l zkvkRHwXp5|>-kdDR?;S#?*n(}Tu`>Woa1R+S;YLesexSBH;zY!1zL8_G`r-wO1d_P;xNQ@rC^@f;2 zwPA43oKmX9M@a6IB*cFD^i&}ijLh)0v&u`#E9Lr}-~B3fUan8>T%|vUEDHP_S9a`@ zaL=ZOtqU`wM)&tm2+bk5M_s0(t!R44(u6fz)B%eO~-fi)*G6qyjbb;hb$m{)x zOVg^S+VQD;MqBplxy4jK2dyn~bD&AI5^GYSh4TLl$t(#F*c6@2k|Bw8^WK$L+?e{kOB&iQ% z&kM(_ZtB}JNpg%-gOFM6^4?Tu)1^Q@HP&h9k*pY?NPuCC!Tb9=Y`?=a&1JuQ{q4V} zhv$D%cD>jMG9AZT*+}^C(b*=v?}4vhzaR~NC^pefr{=oL9G1P!QI$tby~;bKKAO@z0Vc0X_2F;$1C zGYZZrbj~5h89rybbp4^SKIcP`|6R&YTU%|Gzj7y5v+0}SCh5xk(0h6&zrFmxe%}}G z4!&RPUBgiaav{rnCGLD=q2cV3Myi!UuogC>U1d~~53jFZK2=3T={~c|C?hNK#o*wp zFnj#K=>Tqvi z?BP0AMUs@rZh4#38$^~mC$(A|e7GMD2Vr2PD(Ut(jyRv+N;c8)c*Nu5V+H@RXHJ{# zRGvvBA~c!e*ByT1ETHVt8zPed6B(!I1fvB3Qk2{}qcvSVY-iy=Vzh?KlG>CK5CVMT zUJBtftD6Jd@N)prAMfhTHbxq=Nw1~|Xq~EJ#TdY(i0kdPDpn-QC0&rEqLBAj;^@qn zr%*^h5_0X!!<{)pZGkNJd%nLY^65OD47s>>t`sZeV7&NNP1A(f@8Od# z&qk_m`o72e`#Vhqa-(%T9nfU6OtaqRB`}43+QLmXBB! z`rDvj?OxN46}2WmlotKxeWNAMYrTw)SM3bn-Yy_Wri(m+P-8gbz2U~g@N8$?zfUc8v86ERQvrNyUrq| zxfCn&G{G2!nAQtXDlb|`%GRxR9EURFuH~6#F@4HKR=o)6#r*Q+3%br0UmNbQS$fxQ z9MXcn4F{8m1pi(u3m0*yOIhRX!`t|Fk`H?i$Yeyrpb332U)qHjf zW|r=^{Ac;#etrG1QaQ8hK0*&TdZFcEcJNlU)33WhM(WO8xval^PZ0@}J4TSX4o~_w{tM!)2pD743aE9PsJWr^+abg5)fm zvl!1_j3;`0`uYjpPon2S4s9Ds7@k~!+BDKcvG`?-HKPwEJLvMEATtW4i8kj>yVc9U zuvVM5)0&V~FaE|$mSRNGY13aN3F%x*%9OwNa=xsB^jss?Y|Yaoe9CNl&Jz;A9{}LD z-+n9RRkbmcLP{iqCH0dn=)~!CDhIQi8Mno(F$Sl-t5a=3KX;yeRoqClrW{C_Q<4&p za-NRKxhWhlc)48Q6BW%8Whmo{>`_vO>xIf`wv8dEJ6*pr?W#E`p$Z0T$4HO)Ft3cR znswEhVikBg1SF#>oA;JvxD#;*ZRe}C!RzZQv{9>33L`<6%LUHSM#{;)GLiZ}{^S2E zg-zf0g~)t=e_x@NZG=NP{9{_+kW89SJnL5q<1`CCN<<2=bh1!s6+gf+9VybYk;ah5 zXc%qsH3rOnM&BKvn~q%;I`cfk3i!DysI|s#KYpw{DtLWzw=9b(X}adU$NllHY6M#A zfb;phNgQTo53ea}x`q>l((JG)op?P`nFJRURs$xvNXCy^4Iv{o(I&I-cnmQbhM_jMhDm9&5y^qH|W!YV*IemJ5MAvor_U!>b zUS3z+IB68uHdC@#X?Z|0Re6gTzO0{AkHk<%Rq#2{2?NyHBBMrU3UVGvKr@SRRa-za zad~m}reaX#2BvWA#Jb!+{fipk{xf+$F2#z>SD5F3eb*OOyDp~jkU*`nmE#j=S#^>&sHvvvZW<^FzOqR$9XYp~Kh84!>W&eqA}pE~;M+X${Ln_Ljt7zLzEyQsLvlAVI@81JjNo$nXRqI~36Uo>u%JYKm%@ zT{a%Cudk(Wln&11wtZb3mS-Bp@jZ<(RrfL_zk=y`%)-U;+MzgBL8!6;N-1GZfQG@e z!2#iJxyJ|Uo?PU!uTDGulw&Trckp}42a@E3NzMdcha?Eg5iE-;9v&W6xmXe*ko#Io z#?@NG2VchMj7Te`;IdQgRGJTZKdx6&&rPGp_g{X&m#0tUm2$h4U;Faq3*O&fal74c ze}9jcmls?v7o1Kf+}+(3#O-wdfVcOtq$Be)V!1xA=i~8+_xE>v`}Pg*@9)HUxmFHaBM! z1TWHP8)Bh+k>qB_2Z(c>IEZ^Vx2rr#wnE0_=hWe5%S*zA*;c-Xk_WKCrXoVZ=7HnY z!-Q!Zb0vALBE2PB+FFa3mzS!mWzroV9=ly%)C2YGzbi%9G);&Bl^GOsTIgU}M-9l1 zt+lvrvv{_`$hHcUHpZNaIbU@TlIPI!ASzc*-jJ-?RC-7YbJ-2Hhb40+YGPKs;}&#_`TtxyDe1ePHV27eJi1DRYFyV zm=dh*k&{lKjDgjf%+ewSAx7`ZuLt(^$a3qX6uRC1Lvkvw?=4~|je!-ufB&s2KIJG$ z66fW*<~?VzIY0?SY*C>_O|$)eaTZpat0a-3&F{{gah8s2C_)o52Z;ZPn5zHJriCdm zS~_kjBjp-yiLI?FtRl`g>qH`3EqAW=PwZkLCT>TBEbwGM3DqDlul`yirYL1`H&@~%*cmyBa}qo;{Ll~DD+Y4qG46#MxQgXat^(ril zBij4ELuWN&oU+rU%9#!cyZxz(UvIq-Seh)+1kTo>N_?(fLLPs0T`VSW^E@N?RNXr= zz5))XV<}czPDJZ@v&q(1dNpQCt4+V&tWq|&QUH4EU>cQ)ZU|g*gd$(~l02LeVv&>9 z3AvsRE3KipGZUFiQKeNLQ-L>=Mz`NBh)165Doe&%T5I^x<2H>I6gtOc!?b-@sjOOM z)BEd>GD4CE7#}z-$(db9=|CiuWSZswvsEbIU;gr!a$U?_vDV^xz2>f;ieyHcctmtQ zpYihYQb|XpM3M_OT0dnDvdA0-L2RrZe{ zp7woT8JQWAeWZ*nV_LZfN`f~#N4E&U<#MS$w=EhZTG1*(h*(Oh5*mG|;vHhigB^aF z5CM|5W>e1;$@&~=DG;~Pt)G6~wC1KKmBvVGjcFX= z9Le~#1~3g6hAXtDbJyAqU1tj?E@ni}w&rX+_mWDC5L2o6c_Ufi>{v%|S>GI*~VW#kuKZs5{ir9DXL&zKK+C2XzSZt~XZDygR!>OHgB|w@u#Vdpiub{A;c<%iHY^1z8FqAVt+2{*)aNnS@k*)4C!Ejc%Fl)W-8ol?b`q-QROe}$@cW;>trQ#bv)Nox7Ne5v`S1V! z@09P8NoYLY;Wf)699aMuV{kg1@Y7E};c}tW;mhTM*VosQ^eo*yw>ClvNf2Ese%g;(}K99g!y)bZ5o-DA5x^w zF|Lx~olqS~>wEc*woSxGHU!d>tL5KFwWTcTj{9S!24Z9-Wa76jNM9ab#X9iMdk?D? zKA~JM5)EgRTV4b212Lg$$mDo+D}b{uYHMU=%SpZc84}41sK@^{3o#N@#qasZm3mj! zTYg5+h$)i0czy?*a}>>z5t*`w$FNd*T`m`#&u84-JzyMfIB-IIAu~@)v9iEu>zfp_ z2LZo$>@uembwEyWH%zwq(=;qL(M?)xmjjIWp~_;Vb)J>P*O2YDWtYJlW4lNRVzQfP z%5sz9YQ)hRG@VsYoK3fdgS)%iKydfqI%x3VL4y%B&)9i8d!<=l;J z0&6r?Jrrw?#$v(10j23t-0x;=4g|{u>hY+GQ|}+Qw}kPI@6;dCRO1p4>=QIJ;kg<@ z3|T|_E(6ZwDL=tA*4o6dhc8jJ9`%%t{Sw?))>Ts}IyQTszEc(9j-|ZakoW>cQMK3l zVhv!n66g&tzq29(>IP6BSrq3?{wXYT?egOK^a)Jun+^A>yc}P7U$}g^lS*>uebsL6 z>=TkEDc@`vcpJT6&#erFm}C7W(FsH>Pz5Czc&1jV68rg|^6wOUvZKrSA?REv$7 zOSk?q_&+be@Xw)1cCc!c%)VByX9RJZoReg3L@m1I{?wenkBvn&>%CZxsUxkKW|w56 z#LsB^f(_omKCa)MEL8?v+tzQ~$WSP2HGdVC+r6VE3 zkVjx`GhT000Et48K3%wNZ?0LzWSa820RPI}_^kE+f#}as7cw*c5yQxRzt=CS<1%E9 z?PLbk?;#c~2V|J?(T(~io&P`(yp~@@TD9#kNd$5$sPxuzICrMZLNo}L%hhzFS@tbO z<%n6Kq$`(oGs}QhJm`^XuC+AMqiDs-HNgLzy}2?l$yUF$>tWCX6+qE{bcxeg zk3lx?n+{J!vnA@rphI?kJjexhk9cwdnKNW$V-2;nzEu-^!HbVPPQ+VDBY!cO+ShFZ z189dL>bE8SOBxUwhbeJ)ckclRl(O4b`(t=(w*7Lkr}3NjoBu9c_l3s%lfP(0{WX}6 zdW5(T8rm{^1^n%gf#GtYyfUBncIKQ2vc-RoOqEFTBs*0OZ%|J?qeyKfgpNkhFIx*=yfyhqHIES<9u zlPTI9k}Ioqe$icOH{n`Kq=b!E&S}oQpiriI@s;v{%ZoJ zu;J_yn_;)nJrhGOc+$yKerjkv%OXLU)?Kbe&bV-;4anFIF|iHJX-MYaR*D6_VrE)fkfco=WjN@Z1v0rAgUYLaWCTd!9fL(8wH-S427!-JkA9yc3 zX$P_->o)NPy+lY1l8{hCQAa!}LxKzgRa<~G~uJ*TfaY}qR} zDckZXOe`tIzbiM5qaYlS8!&qb5v{Ocf@Wc1VYRK@{Oj%TX7yOfMD5g`ViIfyeJRg-;z^ zgVad|I8G_POaL84a|~k5s+a-S6o*%coe`}G7bXIyB%^kcWv(4@W-2uUT4;J zRsV)FMeesI$T$)~nZbHp1wGk!zpkb%oh|_O7HEku*+=C(4p`aG5;$yAyEkzG?IJ)g zPSp-ykO{R|WIJew=C!&zM|MVDnXb0S>=znJYf2c}gJ!&gx=xK%10e)o#V6HxW4>#L z%%fW%LF>=a=pEC+ol$;+iK0Jz`D-7->p#@j%mfyJcLaBN(e~f1l!+Wa5;@q-ByYZm zUGWlM)b5_GxoM-Xx$|cfw_6n`o!)(oi|!WJkm3@|oB#xM}?W>vsOG-m?%bLb&u2Ig$hB!M5IR!$myPN-iN zA%ff_-rOmOzDwfd+#>aVaB8)_zrSmcM4W9fJ9#3nBA~Aw~(NVW& zO$~^V|421d|u%o%QI#!ovDm>BT5sl>A^u_&97+ zkFTq`Iy%&e8Y0xmRgPki#_J6u)XU`eyo-$3$PQ#h4Rt~(TEzY!R$zY$Pn9BAQKB9a zk7we^oq~-}0=zLt<>FvkA&IxnZ=<3!p9*MHe8V?Yqef_tPR=mQqRj>T*b*#bkcMxf zs33w=lEtz6B{Qfb`aOlBc86pWpwE!9$SZh_bP{3Z(GRUmG3l!mQgYX#P**XOD0&c? zWy2|J>eFI-8Zj~tTiinOu}}Qh(0f|fT+!ny{z$@`t=aMjYzm7rkOvKn(KyB@rBev^ z@To@TVn6_co2=s0A&%jXs4%N-UJs1+NGkvGjp(DQtk7stM5y+pIB8_RR3h3MqpNlB z)P!^w3*2NB%KjU8{V^0M3z?u)D#}0`^YYC%HSO6!RF>lNTJ%7GZPTW4a+1*;0n+|a z)&MF%rTn|am0*<7+Aea7kWn{H-%Ai_K{$d1fzW3+NcR5peapJ{XIIB|^{;MTU3-s{ zoE;R$b}^zbgRb`PTYVwHuTc8m;dE_Di;6a(T!J6Rh%!mh0897)XI!lr;Sb_RxHo(_ zfeqlMY6g9|ZD{W*U_dCfMnY=WlF7CyG{z5wK{M?Bzy-ZFaqT?UKsoRvt_x+~7j}=xm znJw!x2!}PI-u#R4HWWsg+GwgHBdhZw-x<(e?uNKDYwu(}?&C}i;Uh8;ThzgqMvRVG z`X)gUK^jkH*akD1-UrQUhEeDQRi?InMt(|6q9in6`NKAXVlwzKq!;uvf&+N73RdYp zwN~cgQK@WHobvNpjqGzO#~NeDdjI1zPL?W$c52Hc{@UR8w~!cCMXaRlY|f6ve1Wt? z$CYL?epO_>p#~m{`hlL&wxw;H?^AJ%!wU9K3Q`tX+SV%uvF-#+v7gt>;}^Qj)wW4U z&$nlf;em~h)!MsuuHU4J<~Xy*prv=MTRQpBT@8pw$Up-jxA%UFWGu~*P*JZ?q*)hr z-ym_;XsC#z;ypf7nhm)RVuKs{;cPb_?X(S>BlolOV+)wz5#!qmDtyAd)`*&J;8Qo@ z;ySGE7ImflxrLRwJI6i%`ZtLTM@q zlbs&zP6@0QTIE}1DpqKFc1LB^3*NX_zZ-HR3b!D^QNkVMYc4NUro(9Ag?_RKf}L)Q z8ZHja|EobX-g5{wn$RK;AiAh>^pZQ9&zx|E5LAZj!Ff~;{s~L5yE5~-N&2E~HQp1S zucO-}K_{=m;8-n3qz zghr}?(d#RiU7K!OX@%~}OV%}85tZaYhy`=v=+E-c>#iAo9H0)CVUI9)N0A5w4K0u< z#Cf(&FdsS}Fm6WbZN@f573CexCv|j&gca}S8~_;^FC8KRCQco}K&aXKQ6LdI*53G- z*rLke0(Vm#b{k=lEjUCFuD7`R^FPg17hUl&JZT==AX+f{w|jHWm~dU4pwVndT~RMD z#N3&od^ExD6d(#n(C7W~*TC*EYR2)=rm*+m`vs}7>=oS>xBJQSLM*EU^D>!mQW|Dzkur@G`hAYUK)OJr`W6Xcg+Q$%Sc48h9L;H%x;E)|4zwDW>Q29q7 zLBoQa?-TI!>kQd5zP|JZz@z9%3)*d9sD@qu8MB5?Ief6Ag`_q-mHehV$Vq`AU(PhK z?Md<zUG6`OpdkE^r&`g29lSi6`;5;-6jrDfQ9;ZJa39rWIT$ZkI9|mk$Ghx$JO7#1h^iwXJc6=&>F)E3<+akOb3Y4+ zr+PCa&s`v7>pwaC>CQg#D4VMU*d0cvNqNjvCI7(S@n4Fv;%-QbSOmb2nzQ3BjseO( z#{-()!R;s2{N5wGv*}~hxjj1pQf?eAwoil3__kQNY%n(S^zpy3e1~L0i=kql2Ro_g z&HVhNMd^_EvN3Wn#72#0-%hm(v%JWcTWc701a9EjUz8kmlP_ZO)Hu~bhgiw~;^U-3 z6tP-Df6|Hm zWX^U=8@N5!)&^JlV{@Yn{=V`Q{cl79Zu1hZoOd)ng+4FJp$9O<^akXU^|UD2(U&hz~-xN&bR^VmJG0?1>Mb zB0^n9U^auV%M)L>A`ERO`S6RHqvB&u53uLW*Cb+FhXCkvfWNo(=gNd$m$oRxgqlUj ziSw4g4?COmH?~+xzu99UOysYp_9FWNuitr(c_Vp;>q5dX*c-y9Ilte<8edFIsP`l7 zBC>`ZZ!NZ4q>9AlP2E!8mR|Qbk0f?9*|wY08iRS!$W|oCaLX`?C=|giVUpafV6XWg zJ6QEUJdLWe{TIzX*lQeg7j6NT6_S%-NPY5b;_N@Q(sLkCKDbyHpJ1AWOsGODkJJraDC0zR)uNQ7q~&fJJik zDji0UX()ZEV1`b?t;;I1A*HbRa(ehk<4ci;EMk`K`y&zWcg*xkB=@R@w2A|spa|_G zy0TcIQ_&pVjt^g_QrKKg5a~dKE@D3MYhm{e*}EgK4KqzI={}I7TJqks9od=DFbcg> zRapkJgte;%MMgO>tB~1$U_F;K*dWa}s6OZ^^_K46>s%jxe0UAW+5E_IV_x`AW7kca!-{eIj4pbuV_FM|MFF#U@bm} zBh>jtLNPaYKkjZ?4?KhcU+j-zmi4(MMs|cOqVsYl7B7<2nMFVRD+xaiALrv?Ft(X# zFbw7K?}S+4aCDh7t+?U3yKfZGxBHn9hzl^@blG*sgkL-;{QwGStI1h)eXb`2NwxKf*^Ss$}BY1z7 z{a$ERMr#zxQK8lP1G?`PGNIBw(R7Inb*50DapEv2L3e?_-+4v3i3ICxpZ2f&8(LCJ z>!BGdDb;85CTS4f5K4NNlSM_`efN^LYxRuq=Y9Q~@hub)?Al}MhTXm>p}y18(`74Z z=HvXi@;^qgcr|(jVctl_7DNL#kwOv|R3F_*#GZ(Yrbi->hCa z4|{p)-n5msT{Nacv*am;>E4zrq#Q@GNNPdT#h_kvTU zZBvv4!d}PKKLoz&A`*(PdTJ=w%syS4ZOGZ2Fb1q6NL?c9efBqt37!>K zDE^1fb_`}>y7lLIk0is!lyPl7bgxwR>{oWvE6u8B$hX|hF#_kL?G!0oK#m{ewzoR^ z4t}~-MLrbdq$6lzwyr(HwB!koaaQF)(Gu{F6!*+Gpe(7$Cpq{vG&SZF7 zsZbD{owb`(m5g!hvNf(C)&+sG83`R-4DD&~A=|Ydw~Wf-2f@#S0l%B0`>|T&i~~&y z(+bIyB14mrzZyd|Wm&by+wQN<(=4GCs^|(!_Kw1E=Rbq&0Ka~2h{ml?jy?{UIncdtG|nvJt5IxW z2zo(+-v!Bz$X|k#TcB|-PlE+~=AB7Y{4?Y#0u~@I+CH0+)WvBzDS=Zc#}I$1#?{Hb zkK-)hYZ~VE4OLrXc)+h6MAS_TkleAAhir(6WC@O&Ofl2yX%6bcLMGKY3?|Mw2@cf? zy*PV%65%2}){vXKw5>}4{73OLy`M*~REY3YToCrm3FFB;;fTY@va`)wvdPCvy5;kTUaBEw2cUK;`%l>`JJM8#*jaT;!TMXI=Cu7bh^)HTYFsd9L0!at2&cPVNG;BB zl)N)Qu}2so_&kmDBSB^pBX7sjt7_fxvq5aX4|s#Z+t7?+Td>B2pjz6MAI6kjdP=MY zQ(e8cAn3q7?C;+{X}*<pgR8X!k=$X;tjg z_T`+=g8&HHo7uFcpo|2{P=meF%1Qh!T}bY6R%6I-m*W1Zo&MN^bvtysBG6yIC9%ad zTchU~NTMMH*9ol(BG~SjxWy#fg%Uq zQ|NWC`h;NUsCO;hkAp?)HQE?*(2M4qJdWYraEIj4ZxXz5C$ghD?g}AKZ)R~lMqD!~ z%{$VB-?A{=u9XFkAlg44$TETP(8(`_zNpUnnkHJfJ}%a!gUYz1zTKO_LR2ggXCbaN zx9Ma_24xv90eF9eJ_qE#N6n|gxGJHh-TK8ZyqK^*JK!Db`Fi#tq#lP9f$~l-n$7xN zlE=+zJS$uvKOG}Y9xg7%SPJ<_L9&~my!iC5$06j)|8DeM@D4#yk`?GaB!pN!Hs;-|?h84=VA{KCUT-+_?vdq+24YMufwDJ3u~nK_txdiX5Je5s zDkL9KnDtOi<3xa#&s2H6yTi`UH3^-J^|vD3D4FKX#+{;2<{DZt0X;*U@1JB#EnK>zMZQ;$KW5UFiuvXg0v_ic2Dl?V?-u zC;|zcM2QEHY7b_lIjsmqP$pfz&8jUV;wbx~2Pe_NkGCf(KL7LwYs6kVzK4{|xywjK z!Ue+R+Mt$hz@09;DV8k17>Gf(M3W%DcA4O&cPP?{r8xd`0V#}7TnTmX^mEQN;9XW; zX+g|mF2Js=s!DO74;2GfG#sTpL?rVvlOJz5Ok(Be+&WeBk#phVR1M+_2p})3?povD zJZ@LN5?ol}cm^y1wzV;D*}?9({4VD?MFVYH$lc#;9f2 z*AX=kvFvGenQV;QUD_YTBUOxB@gaieA`rT+T^B`?v zVJ}5^@auB6<@VzR?I+<#O$L>(VrwPKEPk(kN=SH6_8TJ`sr)n~6}D?XA z1)+7*YPZEnE9w!7{2^h&HN2CT0=A8Zs4_XRdc7L{@dZ69NXiW=}V)jbS=Z zXznRbkv1eJeoiIJ;*&bYzMlBw;=IB>mB&e9%cEgpGSHMGFu}?QtSjVnvTXwq@2e2a zNUX4g^GUDN`S^^+wn(aC(UNszREgf@w3@U$jp|*8)Cmt}1(SzyEPSB;BRG6bI2)ms z@gD8?ljHG*`l=Rv-bpMfO4BkeIOKQvC-?w{4K9oXVVaXn#iA>cW7ap1>xRpq^}hDa zOL4@)23)`ik!hZs33GeR$7&O{V0K1Z5VP+-TnpkW3e`@VeYADt3I5<8blpnma#84Su$h8nj7hd4*(LiSq0()`G6`JEPfS5{>(6e!WmZIgP?Q3lt_zznr80lhY}Vr||f6UaXW%s9O5 zQeRHCOaK*IEJ9$Hrw6(|M^7sZQE&BJ32$@eYLVtT0%#Q zaTDrSC(Pq9DU^DJ6s&U3q*B(}GF7HVvfAJ#P9)?w59AIEs}R-=VdGo^LE+;I4Xu)0gIC8DNA)b$&}!wGn~Dld6%z( znve-2BZqMe+#^L}R=3QE-;WUed*0^o8CPTxN-MPogn$}M0z_Yifqc_}MvJ0yg5tW& z=HbBsA%JrA`u2^N7BB_lVq!elV^%6P$UlO&$Z z_zyAZb*X$a31qqHpP-}3oeJBIytm}bnZLERV-`$o3Yx=WUMQWs&=BI;7Yrn8a#gNb zY~OiD1NB?;+C7t_%!$AaQ>|P#^|J%MHtjJ73IDtT)W~qj-kg}QaCa)r2_m0#$WYIB zzv<)deVIJs$pYIGO!pM-lxHKteBYwE<6Q9r>REEZyOb^|r;K9Y-JRPn3`e0;Z$bL? zHRMUUO5q}_si{eMGVUgglCHD-ukZZipD#{X06ew#Uv3}!UNio;Y$e*2dbf|N+YCZk^2Qz{#|2?I`K!xB2gJZt3|kB(*!O58TH~3PL8-%hU!3F z7r&?y2b6wWT_d@6d<55I2TE?e@APq><7M!P&{K;O#Pk+5g@uB8qY_-5SVCFEp_Nq% zr)g_0J=gTVOD8@!k(g&ZdPnbG<99OPpxvbwRiaG6R1q3w^d6QVcnI=8K!=gt%(Z4kG*TaphWg=7{iTL%poVN`zJ#A4qWy(iRuoTQSrIutiziWRiBv~Bbm&hNc5|+IqkAwdR3F{2bG^?1Y@#YWc`BB@7XLfs^@3wXu@}^ z@k4@WayaUEp|Qt2j_wLLEU9VZ+IFioL16~NK+ichEVv!1a~mhmrv7F0@QbA=&zFI0@4F&0}($wI<9{1+iY|gS8&YRKdiFL^w!)-Qr~=a;u!80 zvd{UKDpBZ3Rz8IvgHEsmM0t%@euf#gt>aU5umigYWxY;%TuFoDK-iorp|p}sjB?|L zx4#nsm?f2hD)3|V%;n?j^uHe|VdyBGQRNNW*|||kj(E_>ja63I&r1E%X8Fu%g8`Mz z*MTOR;-8dMg67Tm%@O=aq@nFd6~U!8Iy?tQUlJcOs@HNDp<5yyC5|#Vi|E1peC(pa z!W!`sv>|N6YN#V=2nRbW-r#Qm*jQG+OE9T zu7+9pe(HY^QdPO~2iVn^$7)5Y3p*mP8cUY8Kc>={f{Q`JbJ&UUljc*(h~BHYv~uHb zf+(W#8--cJ4STxd;aV#^0N=NI-L}tA4pCA2v~4j7oB_5Zr6&baBPIvOIV&wwVNa7# z@)Md{S`gltg3o5XF)_aOyLYK=R2>GCm8s90pj*lW0WfDa0hW2CtBA@VM1h?Ubc6;+ z$zdmc{|3m8MsR{Sch9_UQoH?=qjO@#OHM>2R0+gRoE3eHSe})H$q<>n z3Udhm(<}X-%-F^C_sH-En7fS&cG@nuMe|hD_yK`(ig$MsxB*E~@|hX^!v}4g3#5Ot zbJ+A#P-cO|l@^qa8s+$>_){`*0L{W}qI0T%6}Qfd6zs8pd@FLY7s&>GgInxi@R{W# za}XEEnb4AVY*9P;HPUUL1E)@NQcf6|(pwWCYb8OK(r(ULzPnxX==DBs*0MGpTB{tA z;%%WXi;nNCt)MCz3gUgnG}}SWeO$+h-a5$gXX#XIiv2#!d!IszA9oPxzj73l&8Bq1 zqwIlS))=a)HPB5)Sl07oILL4+2P+QYGcivPAxCsrP_KT`Atq{HuZ4N&|FNSby9<@9 z;>;p5`D{2cXXLKD+uHa{P;==f5F{VF??4bk#-AL3o~&5(E^?Yzo>Wun_bxQWkn71L z(31SKn{zhz^54VxYPc*<9QIe50X!%XcV)oZqbXz)4_A7ddv#PUC?`) zV-P$cX><_pW+)teW-5PncG7Ubn&E;?GdF!enWd6L^P(b^Di;Jn`6pgV39AGlX?67_ z+a}%&#T|SU{+?KVg^-_H=52m0Dr}Qq;YPjTIAjnnLx$WfClV#xl+W_1`fscmKIU1L|)S9;ag%fG*@8gMPjkRY*}`1N(|&k z4}07RuJgP}KiG*vd0JiU1UP)FD{CGKzTA*16)-g{o)1)mQZP=D}k8^L+>y zxl|5RwDUG?D^0yr`bk9#9vSi3)5oaC6uzo=dYwvU)&bhE_TCHP3c-Y`H&Fv z(`N6vhY{CduzZx8Pg;38TmRaN)h1xtEQ-=pvSPA_&M{y?gg}QTiOClHZbUf>uUo$q z{Mws|qu|8h&$z&%zs(`v4Igf7rrtSnYgbtlp4Wgo0D2q{cf~dQ$=o~^^^wzJcf5a; z(|qzJ-Af}L9kL^oLh`~xHf>xpi)@W+*^HFv8-SaTsI2zV6|=ira!=xCM75bSd@3k@ zk(1I{&}KZiwd;1gi(KGByWCv|CNrJj?fS!8^QW4D3O6Ar zR%|e>!DT|38nRO2*7nF0(H&g5Z1HypGwh**pDLtf zQw#0W8fI7(NG|lw-NgzQbKHs=q(h+pA>#-o35fL4;xRk);YV)VVQ^*@NIK~S7;Ia) zkjIJhMx&ImIT%x4ciUYx+Jr+9u_;lg902#uULB4N;Tv-TKa zG6dAnbB>Y&JS0161}d>}piuEEm2XPvs6*&7_WZY=8c&(XOBr(wpO4I(K>6PJ46%&?luc#NWPsYX)v@bDW|h;<`*x zO0%cmnX1HdJa~!4?5N${fvjrS+h=0n-OuaulbcBRhjZ;qqjTWM`Z|fNt?l%qppeg7 z2*9T9e%_Mgh~|>XXZVr&vUmOC$w+oP z0TeI0Xla&ou)+X&>`huFnpF%QmTd&j6=GLD{*Kv^0h1v!joo(#Ky!!2DQ!n66pNUq zcU44L%i&aD1J?QS7Si932qxTi81iVvoyAMK&{CjqXu|8}3A0%Z!Z?;RF%`<%bz6hG z2t#KFM!62fWnj_@&C_RIrzs4Jv-!)6ouJ}ONt@cuG$f50+3Q z9%JRB@MzJ^)SJu3H8!RZLfqY;v*5Q&E#^O@g3>>`$_*95at5vfV*T2bSPnyaie8Fw z&^F(Kt;8h3y$+!Zr_NjbcFRY{PB*m%BsOYlTQh=1k?F3H;<^DnKpt_*Lx4Kokf;C0HT9`DK>#NH3vsct#OPu$%QhERv&({X|b;rlu z-B)&2WCzs02UHS~l|l=@+;H@a)=EIh6Qle>;g$|9Kc%ge*xcFaGCKNC={~W+L@P96)vU0 zHf~$z7s`5sO;aq|PPL!o8*+CXv>n==Ip^vX4)1I(UqN;L3%e1QfO+NFk{PQq!tkvi zBtfNK>e$O3?m7GYuoTR}hoZ0{K_YOfxne`v%Jpit1qt zXfJJ$h=hM}4&!SmnMrS!;TA^hqJ6a3LbSckyU4sYlGh?84F^G_C zjFt;Mn?3R8q^GN>_?C}?kjw8pOdhy+tuQ0xVX&+rDbAJ$2_ktC0*E^nsa3x)BdO7g z9)#mKUHE!?d!qzne1$An%;Doq`nZnFpR+l_AFAyG_kJP#JAI%eZ)OhQ;e!4Ajf;7v z@{B}>K?hK5Dp&Z-dl|>Pn!=c`&L}^E#*C}Uc|U_g-gz_ zL72J{wSi@I?^DQ)H+|Lo!0$){(|@TEWIrN;4tlDR*r)7olzdVPhv^dg@$2<7YBp`J zZ|(wA^>!cLnX#{&P@c6vJ4GQkh2LkCo6u$lSwBqQNbDYe>%DfBvi$A-152v!O zo4Ve<0B^wid#=hvxq0VEvR`i)`%ajVe~bAj_5!3t@80uEQ{-uU=f7Sm1Y+Xo%F+SW zi(lc>`idLeg9h9w(o@8dK1a?0=)fW|YFzQ-xjJ86ySi4-ds*mAStIf&!w6H!RpCD6 zh>;(fu!|RZ&6Ee{CeN2?>F3hQ@(zB3oU^(sQl-^M5JYPLHQ>emE7=;YMfP4#k1QDC zGh7Rnup0V`=!O2VUj7N$NSxadBJfb+ZTeIAMQ#^Lq#zty5Q--mkJf&O0bf=|VB3#; zHEXUokYp^*Op54-Z7OVwd@L+XjpQ6R?HJuw)_R@Mz&`e8RMLk|!l67JflZ%RLH+OF zYuY=-zN@3N_vG;BltvG$A*_EhPeoL58cz6qA&&g#tHMGjI(qdHL=HtlK#U#kl1FoL zhV!h6A#i|FKreZ1W}iBd@6sgtVd`l>tTWQ-I?#LlrffPUOZXH7laRsz{)ybsB8~%4 z7Kc+KDH?mW#@p~@v7P`k^4i8m5L`@OLJ#y$iOPMtTv@s#1Hn;GJ3T#t8?ZXzek-;l z#2>S#r)vz0M8g`*t%C!a2=&rN1ooq8X9hT9q!bAfz;Mw0<@$J7G41qLhL2l-v9EB% zu&<{pJ32o}C9K+A1>)4;l{xP9#!f^(1lv6-DamX}=)mL3KLt)!g^d8FBjaHvB>2}Q z(69880^3e@l!94V{CjB1Bu zU7DF|-_R85bH3Orn!7}Q9sL-lsTTPJ``utlhcb2`7p~2wC@0AU>BYJSr-;4@I6z`< zf%hyLSP&KNE%mHC#S|j=kH{me&0@CA+KNRfp=7G$Vj3!Y)Ngd@u)PK+;bE*GgHzG- zKf(Ud3D#?uKpPKCH|oTN#_1MUACfgB;{C) zhoba)V{w!;eDn`az2KD(Pi=WNy>T`=Guk2&Qehu4jXllr1KJ`iY^@8GT5sK;V=nF@ zloQp!0VCgKld$sPn#~KP1DMRL?=`y2z{lRw@+dxNTtz+{lU)u#{D*m|?6h5W_SIBo zucA613Vp0L{ZwvJP=lW(#1kX;y)sN9VgIu;@lRX{PRl9>GjzZy6sU3Q55JF{!qQH^ zm{h}hOeOkA@S!b=Wxhpd?mW;t7UPW+E&5Ww63tQ(8is=i zv5<;o7Pvdu{la!M96q2O5>OWYvNdKB;hVD>ovT^KAY@EqVzltcd-AxI#$$^-F?e*Z||uulH9%v?j-K z8YIm*NW$bvhoi3~!05M`wDReV%EL;bpRuAh@H^3&6)Q971>{v5-5QKay!T;HlO-M{bmH)I+2e_HF)pXVI;=U`wGJHov zbV9Ts!Mwu)m4XDsvqyy-bp$-y$~DUDt}-nTAw(Nj15)!#ULDypc9G8AR*Ziw^?m}5 zrux4}&PcJE)~->-(w#hG1HEK-1lsGyO&bQk_=DiSyL#(l7ih`9-RNZ|SSGJZ51Pp& z$d)JgaVfHcIc)ue`;z;4lR11P7V+!PNAT1q`>nWBf*={P1zf5{E?-Ii9*4|bqw{At za1T)GWtipwN(?+TVLUJvEm%iX8q}cBc`5TF<0LsVuK6U0I8qqB1GCOr%i) zLa59iDi!nQ-v)ShdT_=b-I{wT;>$r>is5tHM`t^NqDj$N=8mPQgpyj2Du#`klErXj z2z&c?el33_azQJF;%2(HcI6DwR|xr%q2-KMFRh|l2egPt6pTPqHF-nQCZF#BFv6(@ z_HE;bIeHw-a-!_1JPPb3%NJr8wd(zRyC)TsTWuBBL7O#7p#`z~j;hl>p#@X@7YH7_ zGIDwJ@*J0k%&JwpK*vt=>aJV4QX)0?m&15vdD&tC$F;WpoGwCKNL-83n3Zvvg-0F6L!>pq zwcW<{zPT|Z%uhczI|m#(yM4M`b<5lD^l44WjVLE#QU6lRz@Cm&3-1KTh4s5;cwVbYJ+VBA^qXKB4JCKZ>qh}y6dS}g@_FD)Fw{4v? zUMBQ;R%Z6s^Z7S0o&CoFMZ`jRgQk9k*w7>tTqsf9x~($FSKxZ$=I!2d?DokT?a7-` zfqKLH7Pqx&(h~{O`{y(f`4oqyIe1mvNxWQ285?+iX)-4Px0V2|3&FHOoM28Dt5sY{ z<*gTwKwx5$?@WNgV`rp)g`#qLx_Vka&=O{vh_`7^ja=OVTXi=q7}|n9mfV*ckze)b z6<0-ZrqP*qEdLH%B<*!@>+UvK$0%N9(?6FcuiFEDy>sGs-ty-Lr_7iZd3ph4#A(>2 zvxldX_YH1?~k6HSAKC8VqYtFdRJiBZJj7P1{V`wv)OaPx5OQSibG_)0*|>44C|v)C<@pYAGe z&veXDI29rpZ46_2H6ixVCOI2oM#XqY>g_|XC@DaaS&^=TdD#Z`Xx;DxCebo+ZcdV) zdfnKGmA(m{yg-+I(frbEHkvB$HXwD{D?`UHdL4!-7$YSv z-$n-{Cdt0u=u9-3{eT`LX27i@0#8I&J&0IlZ}eI8IqCzVUV+S+ob$5cl<>bjwr$sK z_^ba%2NDbl-G5!?f7{f(Pvw2zWwE4`tj1V4F|=<)ic^M@Q>=h1?ytLHhYX`Q9X z=EK>KRibZO)$4p4gKbs*qX7mNoX!K0YNI^J&iGXgozFGBS~o@X(wi2<4@B@3R})Q} zy9Wn|Eo!_O>B?KTdAqN6w?p^0;Z~D30$0ZHEevL;&P!*FZXO=Jb7LGDWjMA!*SVH$ z*F!kjFlCr)7?ZYR=)xcYL7^%wvaM+Fzs$L(s*k6y*4#vU^aH?d`nOK9aLV5Oq>3nPA0XqhEy`M`rv4FpcOyMqK$OrDy1E6iQVTY!uk~T3V{4hzKZ_K+I?M*`jz}ve~YiZP2d<6 zCfK*X*+7iKARbzf%IyZ#y9d%vnu$dRvVBZ~vj9U76bjL@y4Slcqx) z`L{0#<;mM1v5WOyH2w>B@_dQahuHBH#DdykD*QDjx4z2Q-wUt`n-ns3iDY8oEk9;9 z)2Y8&rj(VXf&YOpc{;%y2(f!n-KEeP-@?Hv3dT6}$bcyNAXF4o`RK%tBC${^#O6B4 zS)17jYRSL6emK`jS1kI(@TH~7wVV-=*o8=Q*UOSpm75}_h%WK=dAXQXMb6nKMDfrt zz^TgTv29Zi)Hj1Kulb3xak!BXOzztsIa1FBRu5{YRdV~QsFgT9NY3Qo)@a zeK{j~;y^uyUk5THGdWr}43Vu!T5np{19F+{Xjfn>TqGe=j{lg3n${o+;ntJF3B@47 zh$foG$ncAyXLz1}?Rvwb!FqHw(U&Ss2DFO_o=s?WhL(`{x)KHG|Kzo22Vd9A4dCty zr;p2pv-f+P2)1=fVJ>^z5jzvRUB60v^!nc_&lA9Azkc5R3@)g?^Px#`AbI|Kj`Ab? z581E67%5oAgf?4t!ej7p=H)-1ODf$pv)9w_AB0M9>^E8w`9Ace*pS~d=_lt#I0M=pYk`53sMZ3A``qv@RJ3b z!I_J-Q3e+m%6o-*v7cs!#jH^oH7RXG()XHrtrV86v#Q;!*^+}o&Oo+ zoE9v#jPA3){9z;+W|8uRa{%7$gYSEH%Zb7xNdQ-@3~|zmY)a;SoUZJnfaA6TCdh@i zK7-u|msFDux}H>k&83K*-(X0H)MTmu8GVg*ECO5h&Xu>yG(Bj%%p`Mb1dshu+D;%& zz>T#z#oM=bTrg=cGX-(Rd5`8B=LO}DPMz=G5`?H|?BXmm@)`<@PIb%B{oNHT1kWN$ zW{Pn7sUzL$_D8=X2YJ4aZn?R;BLrhKY5#I}w--V(_0f>9`#@0~-UpeO9qdt2;S2k} z3$-M~aq&nq9*N|lj^d-_ad}i2M*7|l#N7|4!&E0vv85;)c35P_VXEux-rwU`ToBuq zxD~FU#!cVs1mL-91D#bb=R}4+5_1a@Nwjpn|9JsmnNwL#UOHX%akc-Crn6wHs*AR; zba!{BNK1DkUDDD5(%l`0Zt3ps?(S~sK7@dD!`r#VFf?@W-avc}Apen~WXW~S1ZHefsDAYnI zC+3`E^!To1qq(C%$kuIP4l3++!0Kt-JlSQzqU z!9KB+H9z{$K`;GDbju4PZ}fM!qsBX$_tMc7=m@*V6LSOZ)obN3?ZzvsE;-$VHFT$bVsO3Y~4iqX=9gbUh45J*v?40*A=?_7YcsIaX1`@o7 zhcL@JuUD}j2if6k=M1onlqZZwqC;lgsE1edP0meF z!YFBAM6+_GOz)#ew|zCd!*^CIGJ&Pz#W7g-OkdI>0v&{8;rj}PEEJR#^$CB+2L`NL-ApB@I-U}E`yF28Nr@(*a%Cbz6nD(&ZQ2R>h8naj* zY){Z`tw0uP-B_wqa^Ri4-DxDuIaV|R1Oj}K?SPCV{R!l11hHANIDNS6k6ey53SFhl9HQc>}l z7!@SLD>cIy&2QeI&B}Q=1^E^3fx9Jj>SwB=9NEUpUcFCYqElj-!8R|{_(0iRNRzH# z8nL^wc+fWGOv7$ZWYX9LXs-5pUuA7OW`rs#S|gkjF}fe-Lo`BAN#uxezyZ^T$4L#R z`m;XA3VgW5N1=~qjMNJ&g6-r-@oXvvQ6eoma@dx~ghIV?8{|<+azX`WQyO#bsITSfo zfO>gc5<{@aN+S;!p;;O)k}DV*hC+=RGmaK&w*OH+q%IHNZRJI^4)fjbpmgFRFQ^=E z%VoAeR9*eJn(R-|#E$W(k9cV-fpqX^VPTR)VV1+%e=v#~&C3qCdhlas&-Th~isfiB z2vb!RbmATg?zd*IhttsQ!dmY^O}cFCc09yA)BzGo;~J&Ogcuy#A!))9^pXmN-Uzn*F< zrW83mW$@D1gY9@Q@6X7#6g$MsQ$)}LLh)r@)sS~vuW=KgQ}7OnCFGv)HJ-z+>BvwR zcJ4Qc^F_?Y@k&%8?vHg}=9vyF>z*uqQ*4mNMHb)+a>qMR5)&ZmE{lk-z8ux4u=nyGKouB>3WFEJp0zxyex9z{Ry8o`PF}sNjubytey)Ck8 zC!5|aqIti;yuh>AeyB*@S`m@v7Ic3IJnxxskvJ7X{?p^hgkDcGees-t2Z+oe&DnRU z{XhBiaay_j*01?fIrByW|k;(E}9tFe>hbLXM!@v8q>DsT!Xsd}0YktJ=29|p=9 z#({kL)Xo1Eu)E54QNtkJUt1zFfW%WbXnA$S;P|#vnM0JX1}L$~3q+VM{5`nJugV(d zKZ9CNL*T~a)iW9Gn1x;8GrKI76yYX$cGC<>D5BM+wvF5ccOxls&tS=7M7gq{Zx|v% z$<4pp*5Wc=vwjQ1;RA~rUy%CVEolx|JwAN@X4Ix9#td_M3cqld7q^q6FB>ulsmchC zb7Q2xt@W6bQasD0V6DM z&|f)TXRf>iAky6F-nhzOdTz166?;|Pj1i&+D^wFAlqdLaoTfMp0 z;u+OAn`eZV;tseiD0W*TQzIupEB~^PSFbftvI%3Mvxv=YuD;Au#iLIxE;}2JlBAs6 zNzB!~^nf6rnP!wjB`9JSUr>*)?zGW`zZ~ULtfYbK6u~wrEC8ZDnu7BJL8`ph-VxMS z!QTq>9BKRf+e79^>K$UDqXoZrn`tvMt|Ab(#x^oUWXQN%gqrcS3*inz{KcwG(j z&Gd0(P`HtEecsRQjvJeQppWQtjzYw;^%6!um{-PF7!Xdw_Lqmec}-a2$dhQKaN@|5 zvz*$W1}ahN_gavCDmf|XkqE%I&;H@HjY7^Kx0zhTm^+ew4ZMPyOsuwylJt|>F0dp_ ztp?4JIR2I@sH(FOv{_aUp6%>plH>Hjk{Q|f8-;pq*ZoAB{()KEuzfjqLdvK_RfPE| ztXtYjcXi9SVLL=Bh_AJtN#$AGre`y=h}S8_K=GLd^gY`o(fsMp^MNEYZ!9LGOwIy6 zIAb=0HbE}-LkPzWAg(i}Xn|^yAxMBLjw?TD_+CQG7-wg9S@*}f_K&qs@-*hn(?(T8 z_lW6HE1R>@Xc@qa`1M`Yd|aUAvJ)pX{F&6IeN>T6ZtE3b&~Ps{Zy*3X0I}UnGlI3^ z5!;r5{e3Dx$pyxmtsXznxoc!QDdK$fnb@FMHrV~+-G_cHOx%TsxHE4XxH#CzJzw60 zu-O3#2C(i?i(?v7=GynapEM5BB_c?i+(!Y94Zzj|Gyr=n@X7#SlH8t0^G=vK{MYX^+T zrm4)+-ER*LDS6ho6oLRKWoP5{{q1Eo3{sI?EDR?)-uLC4`|pESV^!kiG?=+T?nO_4 zPS95Q#Q|LCe2=tVMYL&VjGuzeka@7OfsnCi`3)rmL^SYqSC23;cMKsJ@81;*R9YDQ z->-kWq%tL&^c=0hif#MGA?h~!0^C1d?;!&k_Lj9ALyvCoGq-5tBk#0MWQHPN>_~#q zonxfRCL~pItDF0(GbWw4x;lnEyM}k&2j2!<;&RQjcPq|?qHOP9z7%^P#%tAFDT+63 zE`E95B51T(=9jPMB&XAH>w98T=yJKUlra&^QXEw$6?;Fr;f=biMti|(bd5Y(F%aJA zd0P-Rar?!V;qm?P9S{xKSXL#M-VwMaTP&iZ6B3)2ji8FrIi}Zh|4@oPBvY_; z_EN6F5 z3Sz((A9f#p&_JDWpE*NPoEA=^(ZQ(W??#C0$>^5jXSJ4bj@Gaac2oyseYJhlu+Tj7 z4H|c$9PuNV%KIO*;c8g-KCx9?iV4RCnh%6scb4^Q46tOvZ%17r)&Cg?7)G6C{F$eG zm1k=D1Bd}nzX*mIGTu;cmM|;MGG^n+yisFR5rKI<h^flxUQG%{Y0s+K5Nm+ zG95@_;Y!Aw7{@Hi1?S}C0BcO{?wZJSsRM}5(=jydy+7U_KKZY#puFE1eBk&!FXXTq zFpK5Y>tEWJf96i^XbX))Fs0NpD#zaPzT^7l_k%fQ*S?SqZb+uHyE~sAktt;&j+diZ zn1>`YLCWeJn{#UrDct`nZpQ$r&9+guvv+>a$F-9(J9Dz!YwX8U53rK}sIw8G`s`TB zbhpm}9%=;cLpEyU{~pcvSyZONf`YqGH&|QUK1BCI3^b@9D1fM}Tel0Ox;Sy}pPKsm zy+UL4q1`qBxb+N^ju2JBZ8vWZ+i;X$Xgm}BmhPIoNGQoaUVHoyJ1HHJmvzL=Y*_>z zot;l%WQ$w?gD;;l-rdKy&+%k=!?p$K;Gm;}|GzDRyIVX(=WN(XU3H^QZmVh(%g_DZ zO**@Whcw@;fPl$p1Lt1`YI}=x*tjtCBu)jWzCZX_?2{H*4p7~IP?hb#9$(n7vB;H4 z7h@`f1U3Wiu_At5%Nkv~=GN|x7`@KTr^8})4Gkm5^XdEZvi@HlDCd&2`YWP`yv;d6 z?qum!#7Z$NUl{~zDy>3|LrPQ~QF~X51;_WVaG(1s3M_MXCKrO|-gnSh@sl`>O@E3n z?YcLzABovF$wHE=Fkq&MnGxu$i+=M{E+M$ya6wB{a-`=EJcb$hNv_Xp)AUYd3$Bsm5fp=@K~-ox}yQgsR(4Oe^K^4lq?mL zPA#Wf@t!{(7jVQw&kglO26>KNvBngjf5szIZc>0B*tZI%>rr*+v*HYh|Z`U@@zpNkopf*1W51gLubAa zsHkO_vE7W~zUQYu+v}Y48pQ4Oy#Q$ge5YP)RnNP-5GyO6M{rn!o~Uqap&S!o1|uD9 zO0}}(X@RT@@FxRq$?h|7OAPgs90e;ofb~7!Pd@AbiK*T4rO!AUG5yJ#RL>G(=gh9V zFXIJxV@3A79S?l~Grm_~M=)?fI*CSk#GEfb4aT{A zOiiKCF7(Ul`e0oBvnMMO6BhCv1fh{BYoGwXF#ih5%Mp9t?uoMBeDYpoyclJFT9S1< z6q~J|FJql@u<*OeEbShnNuMYuQf53J(MV@y&ypw^QA=A5o_|*SB4;&4P@xcd>&dU> z*<1U!>WB2}P+cDNw)u#j@V?>CoOn3gFNsu2`VIN(tD6}T(A0$pY|ynT?u^n3ZH{47 zY$oN9(yj^A(?WajAKpTe+DEHo&8?Q2Mx0Mz;ST~JewnlJ5>@{qRtK3Osf+`1fz3gj zsa%eF$+KKOI7rm7YHS95({Ig-tKLs!6^*eVGc8DiEX!uSalYSd1)D7$F?Y3Gzug;VXI9^Wjy?# z8O>(`Imf7}5ObK47EdF9ujLEm}pRj0P)r6AR8nv78#yT$cQ6a1?`BLjKG65`1 z$mjXM7tJ#`bCrCBSgwbcEehUTuUU>n#)W6^YJr(g`S`MR_FKrqwvX5M(tlqiS3n$F zmYd3TV&# zkWAbCL@g07H6RAx>Gi;j_)*XwxlGj8a`PmBEg=C3tb0&UZ9Lz(5reVSRs`bZK%uc; zY`wfO&zfPE?*8fN_@AvDMR$)U6d+9p)I)t-vwZ9&Y)AH|$vk_FWdsV$TupVELYhQ@#U zAApZPFg9wLFg7;!!Z4@Z*tOwLaA;6B7!b-{9xff6oS>>UIc^^xkE5=#vjY*WfYTn$ z?-43y#3XKS;fHw4OqzOku7wY2ywh}O3ZWW#&fHdMy$k%SXV-vjSKpE|ZZ-&*5Pk-o zLsq?26Ftfi%Qp8ru{H{R7O_AhiFL5pjP(c$>QB56Jdm&7av@n8$9XDyc+NL>2E=Ea z-%0cFH!NXtk7?i^!r}KwwqoNLA`CVMLxUp+mfFE(03R)*2J@RQX-e>NnnUpn6?>;( z_*#pdckj0$IpdR}QV~KU2J6-d^8~x8V}zde?WU#3Pl>=myH!E!1K08?<=m*q-?PyT zbC5n&{{LgH7>ET%CkD9Ryx~-{0lau%vMeZc-*0A{g+YeRn^PN6PXp{?s1a zGI*w@``?+=0}6z89s!>;bb`dI_zm^*-Qy#EI|Shz%+Q>5M8#;70+sV zU`;Ir_@yXkA8b|^j~j08Bv!&A@P5>`gDJy1jawVH9LWok7JfQ!0X%4l)-@f-#|{r=Lx4T~~&FW?tpVuE9ya|qbX6bZ~a zot*+t*uO|1aRD*w>S!t>to9j@uXbps5~nPqX>diUMM9hxIA^;FKAztmsz$`-mEhEjXX9%tbNfK9?a;oEgoaKFz8|}sA0&S1^kN> zqkcV#BzXTfvdv$pq1%fO@}=cVX0~GCCN9Y)G|8Rk^p>sqIzEQjejZpOl5D07iC!$` z@+Y#ff7bMb&_x_BYtzcffQF41+)QPuE8 zIs{>1KdA*$wyfmTg9Z%#^$ZzVuQ~XOd972qgQA`B)5zp~hghgjRv?VTC0dbN=P>&l zwu?Nm?HnF_fbBZFkO2dVrI zA))AyS<4m=%w>AT43!22h0g^(fr$K+`}0mBl4;9)*wCDifMd{_l@yQ3Ho^Yi0RMOb z?g5gS9S%y_6jKeXF`l?JJj*z!O9*S+`5NocTk_f9){c(8jGFF#$2R2BaodJIfHUQc zcfUD80pta;**6ap2ZVuGdJQ852_bQ+p$uY=pex7##QHa*3HVAV2m@WLqHZT< z6?RNYJxtB0$ap!_W(?sNA3UuU8A7&4+PNk$n8*Xy;g8Qw>XTr>8K3EoJ8l6t@i{p! z=XsZ7FQ1=($8l_j@txnumw+8%y}^QTvP4v$O*ECZ*vv?)%gPaJnFIC5Q3GiR2Q=LP zuYNRX0{K&7{4XL|QIM7u7S89C$zo5m_+=L;E0_q!2=ETxx)iOCZM;!eRg9wM$l2^#6!aYP(!H7#QVvA;q3vIZmh4b%fODW&_6rY@Ye9niNYR>*m z#s_`LV;Zm71hv@3;V=(YF9_nQfxNY-SQ&~RFV@Ls8*!R-!5;NGRm#}fI|!Q_8@)RJ zg#g(8DeG}9K+fdk_%Bi@Q*$#%K-%?q_5!LdkQT7(c?-?)d*@YUUveRlf@`!>h4_~F z`JsC{CxnLySc&imJT=fh*>1S;NR?)>*;-qKd`?(CYa-jn^Chzz2(#(>vHv!Zfqpbj zGLqH#gq}`f;yid~KQ;m;aL%k5VL&i3HLFxrkihf?VcP9bQO$ z-?RQd3t*|2hHLIU$7W_M;G^Jblr3+m1?!IxB}iK6_>PUk0w+QZou; z@syy|IV>RxdhqB3#@Bj}MWr0`uCwXYB^*mik=mBiHK*vM6c2l0Qc`V6#f-jB>Y8Rh zCEZ(dZnEr7y3D20Q#BQ)f9xy0cCn#55EU=X%gyTjkWUy@wztmCmi`Iw=t<*wT{PwZa(Gm>Q{3u~}j!Tgn~_yvK4$6uWzaJe+b7QbLJ z9U}s^Nkr(y3wkj3{Z_8{1lwYU^6e~z1gY><9s@Pe5CM9<*eS9O_$oEHz0v)z6fi4Q z49BkR&A|aHA>uto-?7V^glI)|BL`gh8MkC06*77U1_q7^!lZMt&wIOq3g=+;7xIC$ zU!NPeD9=pWSVs|(yWEPu5eVc}LO;kJl-xLqLCE|T9j~@re6k~J-sO!!n!v~59EL`6 ziV*oPWedb*oZgtR*#LP8u+$1hqyL*}SY(1BU`(swmy=_Ot${c7NGusJ#n8Rpd|a`- zd-7g`e>NaM_*teK^BP3WW}mwfq5f%ES*cFFV+=jD@1>wr3UZ<^uy=3>xVee!g>#r+ zW%%y|kEp38!Irf3`Q@DTc_V@nX-Mnu?YavIARmdFe@niSFtu67WfFS|%b*DE1qiU$&JMdK7g}_M0Sfs6TNHPv~}?E6OOCIN@*&HLJiXrVu-)SUdjtK#MC%1 zJiIb${80mBZQf8areGH=!y_Y+fc6#dr)wC%1^IXd2^$J!i8krm&rjWKoLf%DgMn9m zycxmr8O~bs(859@nbiY@Kr_>Xa_I;heV#oqpFRR!;(tiHt?j@6CfxTK$F|#TB`We9 zPZswbWVT^)9&LLbH}H*9fPifL81#BMsuxnU!q|yVo1W+5VvODxfr;{PH~StzY`~91 zQmB1cUuvy?d4^ zU6tbV@^Se>I1XvaCAr-KU@KU@4=*1OX@}_HBFS{0CIC%JKsM>CkrSp^ZxE?r*tvgJ zekfZgQ+#P+fWR?R2c6-h_8R|nrM-S9j09yoKAzD94-9i$9NQT($gsDP&VxNAn^6++ z%WGdIq-6p>{5n3pjedUtMjQf&Et=nu|8Q>~3)ST>xfy^1lebFN@E=!$zS52=Ro&~C zr3CVdGk~eg4ajX_QFn?NdG7h@wyr%x?*3pVAgM1wu<}_WPCIHx9Sk}2V5Z{h?(EB{{!>p2#9WxoD*|tBewg_Q693PX#xjy-vo8|(EVmRYIQD;t#(`vN z&d(>H3Rz0Zm>ETJgWqHeQP6^|?yIYmGiJviSt*ybqI1u@x>OrAq%5P9hu}q%-bEZc zVY{XUpLF3@`!f;Ulx-?Zgt5)FBA2)bZ0-0LjHnkv$-<6386I8784cdMS_fpe&?oC~ z#{?=lB={5R{iyX^*E~bsy^J_I_&m#G)seTRV&;tM0=3a7*^Ps@cxo8aetqgth-=P) z#>{^F=;rg;W|VqPr}0k<;x2;7+^lV(GVH8<_6{zGT$E&JvtLoNTXfYyP<%zeG{J4KKlU?NQHx$%yF!k zr$N%awYjsm2Q;!kx@;OZ{0aHg4j9;+O)YHP;`a*hB@MVrXtBqygj9DpIICHzwNY&| z!a1=?I{GVl=lqr5gUYslH94BZgW%}N<{yElh4O}qsPukRvx0Jy#^cMXd02fFP=9pM zU+{7fnKU0e-n?!j^M&^JEKAQTX2d74-BSGOaztR);ZTQNH_D~CK)M2P5l{-dqfByj zGb2nTi`nV*LGm+^A!%+j0XtLncq{izKL|JrLhCd0ZL9=@gaX-svXEW<^vyn{Wc-nR zjEoYx;~%@$O})wRuCWO$Q`W2D_(wshwbL_*X(I3UkguP_rY(eh zO1)1dt9A~|7D%3_5tau8{!Bupi%Npt#OX5g6QHmnptYCPIPBOc^M{8b42fyU=}Dn; z=`k3MdA`aldQ(%#F*DnWtvLmc>%y{5P+$_!qKd)e$3F89t`=nJg;FZAB2W;hG6We! z>>vknEBizqxr?a$q-Td%;*>FilnJ1m=#%6kg*x;=wNhuL z+{0!4ChBjLfM@ZHIPwM|{Q3{-d76N*NgoB3?yRFbb>J3v#3cGG(n);;RvwY*I=lu~ zBd+7#C$gAguO!e^gpxYDg~-%+RP7U?Oj@1|^67U91v#D$T-eRFDHAT;ymFjkV?>G) z3x4t$rs`=R81`A@(?~IFD|8C1S#n+#k$f@C={KXVIlE^o{DthI*|e+HTomyQ^c;Tv zJdoJ|DgPq+_=K4e;lF9v>_Z{ND!0QmifWKR5`4e=g6}q@vcf$()tgsJgv&L1_=}Y9 z4L{~W{RNW1o`m^Nq?@RYEb0)@xq*#QF+_+AyNqYW$9Jo{WFnL%CY^~pO_PL1m_bXZ1``OGFhTdL)Xm-rK6hWyhYl{>&|=f*wIk!F70Wmx(DFFfybhc# z6TW2xLG%lDVh3dxY9Ie=?*^Sb@9d;|NH9*X8bv`2_tTF&{nEu5wgMKIpa8}^XnTYL zO3BFicQHdmBYYMn7Ni=RDBIY8SDdEOQmbUs{jA3GS4biFywSAY2xu+-9}j--!maJCgTim`Zs=k_+7kAz4uO8jSts9;5kPUK zV@EQvE|@s=JhI^^FRa=7xb3PPcrNNZw(@Nm0eC6foYbZQH~>23_(rVRhn(5_ZuYUV zNy#V*gHLsPN2=uMU@Ey*ZL>qcTnYfeQJbo$7sN!}-Yn(9lV47Fn6`r|5EC zvVV@^E8ArEsYf#DLV*NZPwUo63XDTyDKvlnMGEV zRJi1~5t_h*3W*@J;aSWTyLffCU2E5R;r*SE;1R}nT4i1XxOg`C2)>GMYttX1lk{P+ z!rMcz_Vqy}<%l|tsIW1TytuhT7Azrl33D1msU6oE9XM75oepY?cSIEmznv(#HvpBQ z#0^i_H?jy6Kf4iEj?+akZgf%&G9xhu&XUvyBqXlQuIPuxyw1{xrEOB>=7(vDoI6oj z?Rlg8*<+8Bd^b|45!koi=D>?v5Z@8O&aZ$F89~o*7}hDhAHC{5i4SGgrJ|J{wPCO? z%(+ZqO7VT22XeXhH>It_q>i7bCt=>#;2(22PxbDSnEaFGeQ7hwgrBqfU2vh|b(BLv ziC%3Fx23<6Fw0W9ROygR3_CN0NTb^x?6anyLevK0oKAduP%;#=!Ey32f6GmhB8D*+ zzhDJQt<2Czv%3vygUAo#^m5e%Q9FE&)tg-QX^N1eehDO~7OWsH93qULpLj@&G@A>a7}_56HwD1y>DO^9NG7x zFd$Nf`TX8*a=JLmkv3i*Pwb2Ym5Q+d+rcjc^3dHm)F^R`8v7m~GDLr#vB!i?*2Mu{ z9DsQIyV{p-w21_0&`zHhuF}x38VQra$F|qkr-sk;$#UlKr$k7I7r-WJK;wBFAba<( z82Jp$ts`D^=0L|oYilcfumxepU)N0_*lw2zJlBbB076P`^^U|R;T!7@N~QT)TkZ^$ zZjYPgb0{E8yz5_;5~$W771R2S;do0>I00!=lS7_1F`mfP{(1A_-{WK0=7s;#wZN)O z94NXJ#`!S49Xti7up#BY;>>B7t7{yZyL+#+_Mdh!ChGqkUy%QCk$4CQ0)MHPZT{lQ z{~%ydrMFL$%8!SD{ZB91y@!`19?E`{1+Fljg?JF8((S)I{vjxgz_+M8i$2#TZPAPl zDSL!+5G55jiff#k7>eG{sSt0PXed&y4)?gNAW7d|knc!;wkT#(6aU0i2x#_P(lUK> z#IbRS2&&We8<(|uRi7@d+eR0@4c}j}Q7m-*F`NK;)A~cs+EK+E!{~<^s$tx5Uw-af z9^ugoW)BTvz2Oe|GJ3f1gNvJnbXi}sToO!=&iWKNK}1o zML!m(mv~@{p^!;{PVDsmL`2ZfyOgB~(iUMru?V7^V(sdTNK!|*e=&KiWMktlz02SD zJvChRGmIl4g`j*mE%uyC*Pelu;oB%@zyYL(_RhuGm+N|wZ1d3)8fv^a%RmVkx-Kqz zcsc5vq6ajp#js;(&}Rmd)USrixexHB>&`oq#uqk#meO+EfjjvkeY@EkugjdWstJnk zLG#d_eWUS(PK#B!8g3K+WS*$K6CnRnZ89Zt$1J~T_{Nr>(H3AZg2axkn?fUy(L&Hg z(-o}JqzW3j!aITgzuNWlfA$~P*-nnbzy!7>MPR zXziuNGo|-)gf9ZcLG~9e7%<>~FnQNkYRwD5(*!W@f0i#I<^EV4?WLa`qvvP?HSpQ` z>V4{XCJ?(;X8Oy$t{m0_H0|`fKUe5VW3<={<-j=~?T_?C--{E*!YzpOz@g_vXAc0O zn-gc$KK*<*tZ2vvfsm`0-j>T^R>EUGD6N=3j^QV!F`E~k+*j`NCm~YfHPNHZ_C?f+ zu$$MbKD_WCE1Nwfc$)W_5ElA^vgM^nTlbv-lJX>YWVg5RQLnu zS?JcRhXgVys>EJ`YQ9aWCoyS0V96nH3Hj$49FG{p`Tdn+VD-Q`-iZJ|;lxL+xHySd za=kGT@Sw=sakR&^uTX_LdsB(ksXx@<(%*U^jQ!A-zYn2{G|{qh-qL2hGf89`gVJXH z{(I0vute0c1XfVJHa>!mYuiDw0aI)gPl&b-<)%zQ$XI%PlrvV2?Rvemf{PyCf=g~x zR6_&8Q%HYD$0~Iz_B%4tEMLgo9PHZ!OHXhOjCokr*d5wz`u4h9bfWvaO+FvZm79e^8O-80yi zN3o?^!gTM97TJ584u3*$l1Xr(Uyn=REA0rgmWI~lt2HjO(bcS-?c=PnEH@N6UZy5u zuy0g3{%yqr2*ufj7SGJY%Gegt6d+(u6Fro$oZzG^^dD%xtljL`6a5x`=SdQ=2;Stv z{$BV=ZLJ8n|0hXB9JK85;$$N-T_@k}Q zHb`a3xDNheI4REC!2x4asUG;f%`S&ksEPXdT=<^VvR6FsNO#|{`XbD$2{C1 z3H_^vxiIe7aCv#Z@rkLYWit6LlguyKIt$MwQiD6M9#r31Z>;ptztow(*jnx5lYwVut zHi_BU-rS{f(UIYGgEOJEEMhe9&#{rqtEf4sAfA&9)bBby&X-C{A|`Tv(zZZ}ebz5x zu|iHmrc{{5`N#EOrn%TVdR zY1!^3a#;hufYNeA{+uyK7nhKmo0}aia zwl&Vq+YpDh4C*z-hfv{)trqsrs+-DiNAoSvCcNyY+yUg+RF1x&yR z?iC8S&u_0ZmEku_gqmPHQGzBPPbs!6XiB$AS1QUcE;kOuQps)BwSe%^YvG=B$Oip`jS<%a@0!ya3nGamOLiY&WP z`>RSUX2D8Gqs}ks^Q|8Aw568SMlM<%)$`Iy#LSSpuY(u#hQW8dD_|M; zgB82s!?yd9(bvIbH$kS%UnQ1=)Wctrihmh&e%B*b)s%lnT>JyAZO`~a#>8YBhSG_b z+kit%xv~kUwm@AS0lMQ&~Ed zJOis_=p0n9WOsGcTL+ULmrwC9PU~z0T==1J7QW`nxG~=EnV!aF?Wg_o;|?T=v6%3t zpidL|-Wn*Ka`8S{(x4nR8%8NXh9BwoJQWLp6IOH@Q@R?Jr0b$zaF&sa`#A#g<;^!( zV9tkJb9FT%G<%ch&$C<4i$1G+0c7eTIY7Au(6L#^4S4H*Lpaw!y4{#dFH%7ZDU1IY z-?fK_b6Qy(#l*g@fe`QUk_;Rgmp~4A?v#(Cik|GD3?ssRJ zz(XF+?)RAUQQ>&^*>|7Vj0~dJ6~8w;t_%P%js3ukc=5kyMP0fJ@cR9GNTylADr%Uw z@Q89SI2%kYTl)}!A@*t!-EL~c9f2VGhZK=c3G;Mytm$qdg$3|$k*L43FBJr49PAyK zIPnkzFlh;EHbMcE!7R{H4dBDTUk(aPMtnYW3^6vdQyKMRl+tCJ}yfMR20bhB4o!Kfs3s*P)vsl76_==OaR6+_?9Z zG>Z*Z&pmiedUG(%)5tF7+QWDqY5`5vbd2B@J)GMS#J#-0DKM5f{g4*`rec$=@uZJ! zp9j-9$r4=Q?8m#rahR9w*XTt4_+03LP=qp1?Q|s|_9;sAERQR0H*S{Dk`l7;_=kGT zs{nA>|1+p%HEf47S6S6luj^v1-Th0(GY}&iSOQIjM3h^#>MK0$n1@u<1gq4b$@{s^ zWZM#5EsC)VHj#I%F8FqNLcOu;Cuz$cYw|)#wWXavibUpB#;J|HKNoI67q5e7)Ka>8 zGdNhjZNze(FShi=B*a~Ja2+Tlxbc582`y8@Pakz&u8_ZwyUQ}uLH8FBnDLTeXekMP z7xH@t)|rhb=egellVq`#^e6-lo;tEZ$%4KAus*+yo@9K87yf9E@4EsF!BoXQzW)wV z0cX<5Tq>X501pyqSXJUv^X?8UoiuqO!ZkHXVqTZ*LL)t>GpZW&t3yR-%E0dlrhlYl zVM9pq+O~g%5XPPa8MSA675#PQ|FQyf>K%u`v6ewABGryD$ z!+i5TZ=;rK3sj62{Yz(ZT=KZF?4tLJ(3FTOz_ncUwVyFwMvv_$CeQ zWRpd>*|R%@%BB@CvD4cawfb|x0;2?~lr7LPfrp3J*Rp?c!R&68nU%E*uyoqJ+ndIx z9t41OR;QC+Ma1bFg-(Qzcr+ZkvgSD5Q?vjfDoG3TcWBs$y1~!g9Ul7b z-1Q6!y`=Bw7R~DAz^eH_fqA1_F;jIhBw0rJ*Yr1EvUi0iqu^rTlLr9oUf#TXpwUQ$ zp603(H!?)JVB8;9Ur#TJJ;mZOuOIk97&Ear2?-}pkSkp?(J1%kFXaM48^#uC=wHC8 z%S*Ok>QexpL$ivJ@(G~-3=J@?ME7c*sK?s5#Ca60bKJ^4LG2Es1#t}cH_;tN0K7@s zR4HZpw$K_mn3Gdd_8<-&jv%05avR1;96Pa38I1b8u#vr@?1#m>(M{+sV~zl;P9Njt z@nwY0^@+CDU)$i36~g2eDKgyMPDsJV4Fy*^8HZIL>13?gbdcAvmQINFYvC0OvD?+f z@C`;vKgR5a_y~;nI9oZS3H|7m;opk;zM8c1p(VqWMwW=*_`{xQ(Y;a!vKi7;NFTX5 z*Mf>qgbr8se9ee(S==auxcz6t_5s$6SO=1!ve|j%j28RDmWwBYL!*{_b|Qk5?ASg% z{Zz1hZ$?Ua@@AAqDHsUD zKCsP65T=c&_PAYAG&H)7C1kS1csYU5lv(2uM3&ipK3G~)9ZNAAUERZxs)H7S3&pkW zqczj$kX^l<3XNBwx+sbD3okLZOpX=@O~1vx0mA>|b>;){C^&M6k~llbSRhTlzrAP< zT9W71CP-j{0w&Tie?IP?mjEf-)sVflvZR%0fBvsKk?;46gkp#?l9CU%0ObitG(7zL z1CDLZqjT0V#g~S^seX|?R8!^5fFJMI?FM#bGpTV3Y=k;%FV@h-MP6u0SW6grbY6ll zejOr4jhSL*qdW_VnHb|)IQ|6o(d_zr00Rk7Zh;#qxpUkqkTrr%@h@ZhmA2Fb=vxE? zAj7CWfWa(KX-CKdd1RY#WxynSP)#`hKMNov*aP^*IYK^&AwcvTKP`NY&q^1M`+r+D zqguk$n%2)}IZ(v!$;uv&f z2$d9;0UdMd-kT*)$1T0P(vvsSu%!gGVU$D-a^pqT=~9PpV!E7vz}?&E=DKV zhX_d6>>Gv-`sJA)iwt*a%UFsZ8J2OGmPb{p!{wAz<}9o6{m`Y{E|Qdp2s$M`%Fmt1 z4Cv*5bq1Q8*BBUZthny1XZJE@UsC<1fdo>_i;a4&w!K-9%kU_+q9rLV>6=%Nn?NA7 zY#NZ0*WYiP2 zL>tqaDs{506jHs4=m%{A!&cyeyFKSgq4~}_cjOlFcTiGgy(z%`XOw96Z_#V3sv!_s zjyGOLbbUx^uGXZvXp;&yOnp5*e6coR1O`?f9~-yGI)#2xgy`deRlK_}{8GWSeZF{* z_mJ(EBr<7b6+Ar4MUr8G-|kF%q+t-xg;Uw+#OX~Vnb-*dp(x$tS+rBi0@0OsY)+B9^uM8iE}|;+Qa1-yQ#+oa$BR6ev1X4dAEkV9(leDW@DCG zIff1)-HxiX9Aj2PLqo5b1F0-AK*h*J5+mRR%s2xKLbHRma0fV=%F_JF;$7)rEVyXb zGaf}i&`b5(--l_r5bJ~RPC3w%QqLO+fC!ykzrPDrlC7CrqRekeSY_SwijkghK){y` z01nn@tmSQsP8B4jSQu)w;jxo)gZMlc1cC#W#>`?T6(NaWM~S-lxZCvcv=^hqBbxql zb9Kf2ADYfGD6Xzs!a#sv!QBT2cV}?7;1VRbYjAgWC%8L=;1Jy1g9mpF?!oSPZ`Jo3 zC@AL4?7ez*KfMUka2YYmDPTVk`E<8r;OOlg4N!0Y%NkF|D=A)|e%F;vGHlh|d3hn$ zTiQN82F1i#c7rL-0FQ-D0{Z6_VPK-ZfA*zKT3svlu+9p>By)KimOX|80QZ%gg`Oq~VVtdq(UIqcJwEkPQNzs+=hG z8b8kuk=6V{8VJD>-{7+8fb-nSS@>|NRPHA%?4Pc*mZw7mq(fYQiPN%;8$CqtvW5&# zk|GqiB~&|kgJQRF#~WCu%K9w0vkET4>gpE>J->wcJ^-IoYej!(k+s5Vmqze(>{=$E zS9C4md0bjPbj-O%6qm(u9@0y51Pw!-cVL?CSon$KCWyoTJqjC4J=0F@Wk>6*E69%; zM!z?Gxs6W|;KZyC%K_hCW2{{3;1Jn7C^2k3-kr9E$s=7j(2~Qt8yQP~H0f&f;vXxG z*p~SB?|6+Z?9TFwlAiBhzhl%RMwgs{!uW#m)tZNGLV6qWmoU4nnKahuhguRrPN2_a zR8?JQF@VpaGW%GWf3hv&iK<9_4@;XD#~|ebBROi9`TcZ>h4Q0bTYT|EeobB+jES^1 z-~4WZG`-)kL$rpNxVx$J1`B6<{OAl@j2s%(l|@vc$WFV%c{IZ{+yfpwe{QB`% zlmx|RGv&TJxn3Ra`iD{pqk8qSR$p6DML8@v9jYeSMD@s;%a@lJATX6^W8HC|48HQi zX|JV@luXHVf+s#7~u%8ms5*nk|_70?}Qjfgv3DRsaz43_PA-ER0}o2}rpjoS9dlrLci zvB{V*{VWkFu39jb%)MQY_Qg_fz;p$0oc#e=zO@z${8#P)6LH;-i*XAvkR2@}c10;k#3(IYq&`w|K{?_nz7R}7+JN8tyWZo1G6e9@ z_#wTpc%=gOJ0JjO%+~MLE~#<=K>Gi4v&h$60wgDgsVhK$GgM9S@N%MdP?h^H+sU>8 z>?K9iDnOvdv|O&FBsDi><<`fYEYz815~S)vhte=SJk12zgCY#RV%az+?vKIvBlj+0 z5<77%+Xdc=#TISVfDb77n32|7QMT&-!U1fc_S$jZ8AytegVXPk)^F?)R>4{-C{KqY zfmjpyd1o4ZijrTMF>L5-AA_+})VRn@Q}ts4qV$~CJJrtwP#`+uEN6JrH(_U_M6BcM z2(6Ptm0J)10tLuS`1GPbpP^;1Xd{BfsX{JkMT2THa!;B~-1s{VBWwEyOIyEW8={;W zG4LnQRs7)lu0A-hq{f2vuwt^~fU+=1ndcE~UQ=wU<3Ez!70w0^45BisxNV=d@encW zA68!x*rTOIOv&BoHRJA{m9mCso;Ze-akWKUh^5UA7_=c?ma>kl8B7Abk)hi5U-q^Z zCy(Mu6$*nS2*U9d?yyT-tFv-8$r1k)qSo528UpA1H>jZ%Lk5!1WhUtfZ>{a^L^$?k z))oIb67#7W;maKWI&jvcIqZ+2YX>^2Vp{#;h_LjVjlm5~4IEw=^}QMMS{)`w+ml+1 z*~cihFva$FVOuoOb*28Y+GfZ#zAwiL9!`}BCfzYp|{{znTtzZqu+^} zA|GowND9?4Q2sRJzV(-|-+y&a006!1G*Ko}VEpp!)%)dfH-5wv^DVbc6!jM~kinmE zVZyZ;?k?=lH9uFcn%!3XNOdI_g8q2@bQ%#aHV6$T*ad`lz=p}zG=7S2|CYMp{U!l* zC!FV}8q#IaZ}V&oNg)AKa%ni0P96|z4cy!c<9B$rhmM^bk0?-H22Pj zoV{f;?Va;CT;N9aV*$yN9RUGA6!Gfv?m5*Vc%u}!eEaJPQT4^xk@jZ9Nxb5)j{#72 zy*D=;_*m(R<0=8irmEyO^kl4ISy^AzH9i#umU5I=!UIu%t*HZ06gc%{_z?Cd&&noZ zqIIShZR6ia#y{zXyN;QO5ASL9KGvNDFfcz2V$v;@fT+sIKtHF+Ni~VZMf8+MzO zug7a{&7{PhD*4ec)+R!_HC4jTIV8e|PAP0l;g;V~Td!r3Kl1L4C-eq#4yO;8?ts6} zX=8Zm8>TGd?-l66BiiHJb?h_}crZg37#5)sx3%JNKyVLQKmlxCzAFxquRc1pmOl%Y z$2m9Wrub98<$cMdG~F+j0TmyeF4bsNmok41W7Fy`AY$E zi3*`$T#61LhGJ&1BKK@XS`eiD8#!T;d+n@~IPmB|5Svz#`J=lU_Nn6GOrYM-9kA;Ii zu^#hxfcNq5!?TD;41|_h<|?4FLWPVWjn0&*N6#<386LQ9c=-5qSjZDVtksCl?$K>-2SB+?3_ zswPlky7}WgG**203)2Ybd&I>2r@1h%Ok#!U2{(TakWC32f(awB!@O@jv7Nw&S4t==7GdAcJ4@t zWC%?zy8-G?KZ1);Ua&LiBYxbn#eWGFGIJn<)qj05$u(8O-2WJwfJ{#cs22$$fY};w zZpBR?|ETP<_kStNPbr)?{`Ut^asJ!v_lCrx>>vH1ZlXTZPT?bVCQltV6Tv$sr`k}T z;{+m-1YDx(j2P^A7kG|6#(GOr4l$pmF}Y;2Z_q1ca=3AHLuT3&Gt|`90YdjyzqNnQ ze?$!0lK;ux#nm&%*$ z0{GR=_9;0)KDD25C)6u5yo_mfUD~p3Mb)-4MZ(9UZcHn&LfW6?4@LiPmReu`Y0rLD z$=YxE95n6`Rf#q-_F2(vJvB8cC$3`EoN; z6?&CyP&5=xVT>C697CuuCng6?or7p5MAwTyvshhs%oh$n{o1mgX)0eUNHq(=+(75j zPo-*fL(E3O+%Lu#HDvp{@{1{HApFki!<5~n0U}6g16>hedtKlzB3$hIfn{;ekU6L0 zFkY7aom{sv$*1pyB)zvTw8Pmk=>oX#FE)Fn>3gs&3x3b{Of9U-0)o5u=L|8^xS5md zT48+WEi;jz2B5^cw|bo{f$dM@(z?tPV`sw!)Nq{kiQ_+O0AznHAhP4Bjj~JRPY%4a z?goXX<~DW?vEOC66xCKrm^pV-Yg@tSa`Sy+4@ZyE#v+)aJ zjjb()ig>qGKi)6SU&&eaJzso)C0!h1hgqXmn)JhySKR~|H`aPavA`C ze!qHY`|FKh`;BAo30usv*fWxG{C5-5;VD<AAG;JomKLu~lLbnQz#l+(C7DKn>~Rwqfv z!NLC`*+&UwB0%<^O9LX;mVZjFx*s)#$zUPunH<+g=*xR+Yb0SCZSVpG9yAHmaJb`; zB+CPT9c&aH+bTZC?@3ArT>77Sh|5Az*9?(LCnKXi7NP2UoO#-A+&!#8DUmIEOkkH? z=Vm5!Mpbp}aN^^U8GP&Bc`=Rz_&83gB0a7puDg6_#^P#hn9h`nH$mm%1;L|zm9&(-x!)mT4R&8|g<9BUv-e;9 zyhRetdt*~zIIS4({;L++b|;^u1X;{E1$}0bEMbc|@#55r{)y(H%c5C*bmHYw8NM(T zBIg7>MUX|55vcgaoK()357bh#` zoCgIpb4MU4EEBHa6wDd;EU(?5xq1{`)RS_N`a@d;TwTV?_2-AjZJusKlldnfAqw`3 z2XCLpOXwkdAQRK!|1LzF%2^1^`TYR%1z2MhXT!xIyT0t1{z&QTeqHU}21aK5I_MtY zO9pS(c>g&C!^!**o?&rT=Z-mPV`v+qqw;t?vxlf1u_R7S+t&*L86QOjOYCS3;Qi54 zQAP*PF3y8K?F+E<@P8lsK(G9b_XCiy8+`nc!ynJ32Q?TPyYDBD<%BE3jF=V|QLL@Ip@{mYO& z5y8(nLxf3dViY6pp_&@DR4f&9Z_DTH&2gZjvyAZzEB9PfAeV7`=JeahXJj>;4&}w! z2jpI(e<1l3Z8$o;59OTEydea<)B190yOYVN#nq=lI|12JG$l1td!K(81jH*t-y+2z z_QZjHR-Z!s@NJsx9}-A%k=!q0o1%tD1@Pig9&nC=lvENN-R-66TG%E?oUs%sp%kO> zC@Av^;n~;$j)F1|P8261NqGvUc2Ybq6dRBPrU~2LwQ;Y?p~JeOGrsM0<)G$W9;!}L zN1wMNtM>%VQ;!oNte-UQA0IFyzgEpP;yWfPe!5c}_A7hBHWgRc`_p2{I<)oj;**Vt z<9XR~rA)|oswIg-fkRywi@eFBhDWE>}-!tlBkrgdY5d-4yzzTs@Ia^BcG=|qv9riaN%lPcmhzE1OaUFg^n~u$` zU385>w-`I=-VtDs2P}Qiq1rV|acFx>ki=I&OH@uF7(2%9Jn7Rn{Epfs!;C2jH_PB? zE#~(ng$+kKVCDgxUOX&ZeI$XitCH}qyJBf4P^+QO((n4w{WR1Ov4j|@dlRtYb*f=j zG>ZonK%)A!tlqQbsR0uGh*MfWwlie~K89{b?e&(=)=~$j42i`O|-dzabm!+Ua^;fTd0+&&h_spdz8Lew8;}Gp5%#oT8)+e% z;CH9c;n$_r%S)_EL@Q-YrnqMSkFqQTiM|8G9N=cy^ZB@q*;dREomTccPdk%em%qq1 z1am;!Dii);nt9)|Nhh}L__58>29$)oqT`UqJy|7LhF!I&sI%5==;s4H)&C$n)!T8b zn^a;1tE!=J301#n+|3`Nz)3xflt_Lv>#^WoAX30c%hzH#L3o%t_$g53+?n|cgZ!a0 zb~3vbslY|^jDzXy&=0ATX2k0H7`8Q^x1C9ReyvT}w2iL^K*4s@optEzc0jWgc`~f_ ziP-hOYVnID*<<9w4#vyLtX}}|^x>C#OY7^2P_%2Tgg$P%lEp}rfCF%{h(TQAY5}?t znXtbYAgCI?9ZasWl15V1yC~1N(oo^yNHn6&;`4pON1&S3*-bO>>ow*BHY+FsAL*BY zeMpP_9{%S+n6p=<)x#bJps@;_m=S7 zdo8Vb?$sNtxL>?sRiCllPZwiWe?U}0z5A?P1?FOpg$Xo%#nvx>taGeY5H!mj=nNaL zbfrVvAcblh`Ljocd%V`y1x7LVf8^kQYBJ~)8EsEv{4@#;WXDazv$5SeK-;jjGGPs64=sRe2XLFbh9zyNMx4_ zWNcZjb=Y_!nX$MdpQEHyP!rC(upli1RNT`r_SPIJfDKzkP>vWreZ${ee4TW2Q_QN#jH zQ~-PxRXE_nhrBMc>Sjr3F#=~oe6_MV`PJZ3W4I`|{Nh}!Oc-bjH-(ET4yZ$t?5k^W z3-8T3wHGVECqgLI-I@AGl0-+KT{G8vGl?b~!Ulx{0`?FZsp*n*b<_$*v)G+^qiVe} zYXR%#(I$FEI*Jaj_p$BWYl9e;Hu;S_ea2JDDsU!Mu&al9%K6IDQiJeSqS|{#pD5e@f~hAoNN=fzWJ)?T9&R15RUWkP#R%r0wK1$+}(4*S^zNUVK*N>Xs* z@Msk^`44A;^930h@s)tRj+HGPUYeL8LAhV$|yoBpR0b(&sqbsDfBOP|ucX;>HD-7Wj{_6+FWt-3|D za_io|c`vQ$7f&k}+cXuuH74N?|1O1^0;m(-hO}TA3No1{D!XC->0`X)V(D zAI$c4?+J4(fSfahy7Ji~nkq>^@+TMgV_Y~BC)UU;qWK)1(A!xJ6iVCzv}f+_>6swz zDUMcBzCCtZwR8ZK~Ox2#?|mnIrEvl~lOv`RQZI`cpb=SGgAg znR>!Sq~fG!#TBYcoe!4gM)={-?z`~E%E-vwBj2I_*7n4*DYuFDC5w7xmK%OhfMAOu z&;}hhz%p+0l49d$_n$|T(@O18+_}sDVQkZnU2}%BpxlfHQj(?_4JJ#a(kDhY1K#mR+nQ4NY4Ic@hCd5k8ypg2!0L)Y1-H}<8iUgx%ep`1-FX7dF+xbovIHr<; zr5Xcix7{m`QOm96v;3xH^J(*&5w$R_H=jM&l}3$aS~9Xcwv6u|(#oo(AWULN^7U38 zkNUgl7~KJUGMRaE4~c9`z%nqwJHl}WX=i5)?h$(VS>517(IOcUaNjxtJ4WTgPR$tf zz&R;+OBb{VO>q=|Csc(b)06-k!`_h9TY{%u%d-Op;;o?VzyD?n@Ft8k$v)n4VvLwU zFWi9`!qlznoI;BG9SdaTz?$>-l#R(ks}&NN2_W`JAmpKlyN+7w)4tA}PwglHlaV}W zE<-=k@;@&CDm1w)fIA*GW$#VP0xDr@f&0ju@T(d=&kPsX*mOb?L3XiHnwlMmy3M0j z3jE~C$9{V<03POKAOU==lRji<4M%ckkP6L9JDSd&v+}JE}Yv;R0DbmVd(3?ZH0?J`b^AL{Dbl=dCUS z3mTIL)@#$DtlK{UA!w=K2^s?afiO1Ba^4>p7yE<7WOr>lDtCTfAaJ8wp0swbz_zlw zDO(5m$A>OQCU3Y5ZTug)_o_=hm#|1MQV=NegZ%rUXD>F?ekgNokJm((jKXv)$}S*< z;{>UcTeA5@JJumm!`T8Ab0Qu9DxfuD>>0E)$Dtu{o)TAOQc*+lZ_##3ieOyl8H8O< z$Cf23RD3nx;V+*d7%WhDOK9|Bw2QUyW$WHihsI8hFfb>sGvqBx5&Oy6Geme-ecA(? z;IKU`uI<5VH5XfiTn`S#-Z-B5{5v-fEx1|_0X&-Ua?*8fzGsyL=MS4?N~0aMe$GnK zjG0mK5S1nD{}jZj05lP^8r1X;5%6tkb33h5QC5YAhb#Xjel;hwzm-kuVNatcDq?UM zQTgTS>nqq+?UG00ECAfuP)~a+LfTY%%=9#SVVRn9$QobPqfH&@+hnvQ1`gCDW5q|D z=Jg2%Uumg;$dNt}y|nfhadt7+{qaOG@ox0#!~`cI9GI|T*y3M!7d~n~*mGx*4^!j6 z0ST)}n*PD1?=xgc`Iu!!%Obv0s!Kb{B)u_kzeFgg(&hDSc^#4Xphjc}q)yPBKLs} z&^lI*TEH7UnzHzVJXkm7Q{<8uLitoi+2o65d_*}w40Ocs?UktbZTdk(SSjzgYN%NaRUEm8c)DRxgK*^jOB>0zrc=cxl z)`?VPY^-ormBcK(V_KB@i`Br-gRZr^Gde}VLr$#{zP1j|yV)f+1_^T<^mDe@?K|~8 z^0fKs@q!T=d=j*z<1QGmABz9ZF2+1Ef$sC!itY$&VwbSn%Tg)*r=#~dJ3ZwiFEL%Y z-zF}*k^2o(WlilKj67%sOnxKPi&o%Sz-sT7vH(@*C~M;m7o95+_Z!_0(z*272z-ij z*b}T1=E(TwK^Zf~bq?JfZk`|1v+;|1V1v26w#ZoFhv0bKby2U?DqdKQQ7twD*`jB| zziKEv_o2%p1P+9gI-bLn8#CDJ>;*2LMrS5wm48vr6uRh{J(cIysD1L64)a-M;!&e$Ru%646e{xNCnkVxC{^B7iSRf8%?A&B#zN3 zZj??2C;9A}ny`~o?ikZ!fwhs$0~PPkW5mtrzC=@=BGs{9urt3r{8 z39J}T@A$B#fp%wri3x0X_tr%gAJiGG^1O(~n|Fg^P`!fg>2%|rdD=#jIAwxD9d?n& ziOFQavv3a7ib--3U(FiTK5{Xg+h0h@_6^V#LU=LscEzHKOU@yKGOc(F2*#}k72U{* zb?wb$I9x@si`^SQ>O<6XPnsh`UdnB!(INzF#-bs-zJ^FZK6~WTilpkNx~?q8jzd!% zS9oPU@g8xZ0Kf{2^1Wp!%UjS3UP~(JY0Fhc4g-+J92|JVRbm9RV-9r^ZPTI{>8Pfr zruup%WN-^`LI`IpR)vH^PoIEs*i<{Lt=dt5^gkrs&eN0Uo*gIP0^m}~EVR;dT>f%L zt2s_fVmhmx8tA!4^|;R(*ErJa6N7XXZG4FCg?bQCCI#3-WSDi;OdG{(+EEqO3%5!B z>3?)z86-vZ&HrIKo0QO2ELnG8$k31A>)0HD#Pmm;EYDp26eep@OQpys|FR%B zw^_#FAxFn6HZkoNPs}`vMIz@g2{XA7bB}^z4LMN<0%{y=I*JmJO?S&URKaao%-qAm z^ha57m?2nvqR*+2!!34_P#pdyvY-Yh+t6$4I?QA(OCxq_AOQ|>CP1>KErUEIioZ&QDyHQooZ|e$z$T3q8$M5an7ql@V(j6y&T%R8 zj8+F*OuIr#_JPe8`FuR2vY{y9!Ohg=Y}uQz{nhq;O@Dp&`Ks&Ttf6AA@G`wMLF0-2 zw#sX)aRQTefk{R}ss?=09MGQ?vggrZ zAHqX4_ea*OGC>N-zk`p0M#B1H9iu6xgXC`=mLYT(_jI=8>X!pHX060A!w~^;Hez&e zqv04iS2l94f-wdr()+tBv7+mok8OXp&fiEM+})SYnje>h-;hfi*!LopomgYp04K`e zpyWsgz~+#vK5t_tCJqr8yuJlad3Dkq8nx;H`|P+fWf21Dk-1K>(~@ykTy_PZrj{2A zJ-fY8^K2*u2xJepA?-p(p+zh>!=82HeiilZz0!*3X3*g&vua>IzDM_vZH&9FLLj9G z$xpP+h$?%2e#WT$&qF3AqfZX_N{^m}s+s^ZLigKUjcAurQDciGIhb<;ZKNu8&9uU! z7$%&85vaARX9To&MU)0|@qa7bd^=@OQQq zo{E_+f1k?^DG0UDY43x0sVu@buzKOcC$-Io4Q-G3@G@xt!6Dt(s7T`6tg}1GW3ML= z%5B-cfsB>HV!Q_Zwm*&smW8Jq4P5u8MRYIC*3%8+Mfu646CX1`U07$G5;eG-M2<>W z;td2KfsBy!B!XVU@>ibTRweG@FciKM-=HV)i-e&@ zJDz$lwE-!87!)gdXliLsI3tWu3`~8klFxJo%X`DXsK1gkQlSx<&%oCdwyv-j5BqsZTa2pBUiMT_+sYi7ZXXeP>Gy z7ukkB1qp}A>?!}XeVD1GDoj2w5yw)H{l) zDI^1{#^p8B`ZmC2AUDI0^Otb-XEBeL^86|b35R@84(A{~9kV$URy1*DZhc&OvV%35KII7pDO5 zS`ts9&`a@)Gf^aRLdQhoaQ*0{X)9e^{&e~hWfHfMdX!Dyhjp1Y#X;hVx*ayyGdNW_ z+uXdqhd2L_PKz3_Y$~7!w8VK_nO2@uo>U)eUt?Lg9lZNfiWt`Q1i>PpKvoylH7af* zXSVxbg>~Bx4oDLxi3M)eqtMR}%pY>SCFVHU0tK#9v*Q(j9GD~?5_2=A!&JcpvigG= zE7%$1nC^xG9*f=DE_mL9Rbs`*!=vYTe%oO=R6Gq^Z!(G3{?`Lq;GyW?+4+o=(>H(X zL>f}XiebEXT*SIU@pf8`bn<1#H6fIdv6I5}Ah{|+DVHmQ@fjcXGtyS7#O$gih z-(w=)Lw-T{i4Hf^;No+#;Kl|q0X?BCnFgv4rCeMsC2q!(#BqC)63o}2fGs;QY=9Sq zgIL08r{9ZZ%nI*HRWxvY;ss};JKrdc^#h+vXzHQD$q66+1A?qcRLGXaPsvht1RfD& zSyRo^d>Hw&0gvCX#1aX1h|+Z%s#pUDFD}g!Q*qp$%Bn=Zsxa7q;Fx##S}bM$`|LL8 z+1iUzE&Utc7pRb%IxUcbCo96uxB3y!maPQ61#n$QU^3 zr3F|66e`ZxEuY#kccJB0toCfPfQn&RcYy*t%IutdI9v^1^TkC}LBF?Mmb%?TsFqhh zVLD!0%%G8naFta5=U@I=jD4+XD4YCJ>a&+3hfo|X83eN_C^=@qxG^(~b3gpJfP8b~s`b(?ktt0+GgL)x_4@+8TXzqy~b z=#S+KTy5+E6y^U&$9X_0=~3pG3|c(45S%fs0a2H}RXP}}kN{%Lf+Fn!&alpxSUILP8hco z8oIax>;`HMjjEuUGuDS6usmVM5eB;e~#8BwU9xwcE*R z8W$o9reexNAO{CZ?P~zbv_ViZq(D0wPVc?<9+>=>;mtC*pksMRfvN3T@GSX#Ki)s) zSvxB3k~Z<4QA~+GV{izvuX&&$2>GCDU+Ed~GY7P?=Dks=54)PGXkj1aaC~!VatpLwtGR{AJN-Qz_g39e^Cv2g{0m z<+=k~1PEQi_-+nat0G;WD9a^08z_C`u$LL)Pw(wx2$cUIM#l@<7MyX1Z#`K0GAfQC zMI?@F;;qFG9)Rp@Uo&!R5VEdiIWf#uC-IEy{ubX1n{>-HNZz=_j>}3;n?0rYaFU2C zJmAk-YmAV~WWwFgic%i!!!DJX5GTH$L4jihqUwy{us1;=A^*c!R6!y$NkwiV+J~m9 zkL%&5FRcXqR$Ya=wfUJN8b3%=PSpDo*+I=jFn(lpzjm`~CH&UlKjF9G_jCb9t01=i z{TIIujLXfkKb{{hB-q2U{#iX5a*vGVt81&4!zkz_HD-N)1X~C5taIL2?r>1TlEf7R z8%wbHLY1V{jmQjZZg^iW$ks=sv-DDa2SVH(ey@bUsdr^`;M%8;`L~nZ|MKZ|xg}98 z0$>>z^#!AK=~`Sa_QHa#@xy2*C&Qt2D$6%yCl@_@nX6OF`(%P^FvJ1I0yk-Thu>UZ zLbv9aY-Yl*U@tn7$r2TekhX*5K1Sb-C(_GpjN$Oe`q*7)d=2L*$#!42GKGFcno5zw z+V#H$H@2#@*G+~SQ$U>xpuE*>#>2JkguBUd=oz<*DSmGDZq$>^nAtY@s-ya;}X%zN}MIr6W} zR#=}?TYYZLI4<#N`+OvKV#$A4JT=`>2lc=P<#AHUpn_*6v1a0zs$BP*!XD?dE{@#? zO-ZrQzlFh&56}Y4I}{Kdyq6;55?XrvUGgTt8#QnMyxM`KtwE|3|443!`goC{4eQE( zheO=G1&n@U|F%wN7yy9&sL8Gr%=)xTReRNOK zHbL?L`Q`lldo{m=Bn^CUka$hPp&)$Dr~linS4pf9PTEF3_?(_3Qg7D5p-CL&2e)0!b_dj=L?0u z2TpCv+VtZOLR^ODOgVct{nr|=IqrE~`Pgy!8<`(?Nge}BKNDdR7*Bn^{x=5^cWX+Xa(bD28*)|`!Q5wy zj_2*+$Lve4E#}wbV>*2MRL7KoX#>9d9g7?uzY9UYX6y&JNFOH}CMDDb;czk?-P(Rx zhKex=s8gLA2ud9L?ipq)E|a0*$Ejm;x(1wnmvC+(&O)TCO@YxS=!nC{FdpC161??w znTn%3HjAvRwt8Pb1K>9fD`eE!)Hp5fz{3uVIOXiI@nph7FqPHg9tuEq@pEa$sO1E_ zillXeXnB0RiC7XXmJ^)l^IIWexSir;@7x@++v%tIbvoa)Ty*6EpmxI;oG2liH-pKR;*CY_vAtu$-YHS zcbV)zWYg`Hj={o8z1a<~Pv~azL5C+UMN>u{>X9z;jBAIR3y84$-(%=edD-eDFBCu0 z{!}?IYcxyEM7{F*olkp;7?Vd$@0|V>X}xTW_K<{o^^5>nuv33+bgE$TGlIqn+s$dM zW-z+3x)v1}pjf;5_?|x&Q84KWS0vEJmOdo4ANk)hFpV|ktRisOkq<~xA{jLU zGTL5t8Dz!Cf}(mJo$OUplQ7=-0|&IcVKx_U+pq6{VP|idl_nOkMaKrk*E=zP`T=mO z0A!xw7~14=YBjL%B-ze$PmYhe1K|h$n9!f9NS$05W(8Nf6Bh%Ii1b4UsK4=`SlB&S zC}6Sin@6f#nXEO_bRq(ODqF#&TpRdVL zt~(R_-nv5{W_MCIE}aZ=HmNI030g{rCBrQ2j?iVifNR_GG_}Lc?Ic!2?Y&i1?7~8} zn-x@>zJ@a~A%6=b9D(4KC<-85Li=39BqtOzj_147HvTdSMv@Fc)o_rXT_Esjxir-k zXRgmg(^R77NqIE^Y5g_D=B8(}FG=i1z=$LUCf1eAI!#dX>gsC1P&N){smt2;# zy7|JuO@Y%Sj&1{7X9)hR-Mo0?!{3@SriNf8Fso-u$y2l*>N)%PE5zl)z{t!&(Z)b) z=&2dkgEdsz?Tv^rs*As{DzP{iGtNd828=bxNSwN@MkD9pU9B(NX}>Aav+ZAr@+HSQ zjkO$=b#cd#7Vie7IAqZ`ZFIdF)z?A}azOqd!Iaqo^x0%=yF+5eHOV)O_rmb6BBv@s zSyKz6)&XGaW2C)9Gk1aPhI=^2?)ix#8YZXKOJMVzWBcV;S74l7T@peV$3_OywWpR= z3IZVNx`Zi1A+4N$o%B5nt~o03COH?luCitP{c|&Ld?U=|I-UwL;=*RBgADAObO!H| zGiOVt_rUwE&3M?Jf)MZl9Etlzg*f{Knxu-zN@9C20`evrY1VabYTTh}pPe<~@U*wy zQeCiu%JjUt9X@=APG=^qgH-(+Z?&1MmlxA`c8Vi?k#C^%k%fd8U4n(=agF5q6)ZsI!?Sq_~QHPZ9&o?3k@psmkHFeXh85 zCmrdKIFg|_m?x;-VJwL8w4aL@KDbmLqwTLu(_h2 z0`7cA1I_J7UdBoBx@=p8(qSlX7T!=l1Kq%E_jG|3X21?JSI32QQ|2Sg<-3zZ_VGtm zK$?w0l^m3PyxDL`mK>9W_pT#ep}ZB5t4@)iDG8~~H!O#BmHSYuHOo&UQrbm;f>9== zRpAwm=W>FRsQ+tTdLL7_d-aTZJD{SUZhf`lA&kxUuYUU*Hjh~SKe{P!;CN*q)~3a> zI|$2M$i_8p9c-5Zr=NuF#Pin4I>t;uR&sO9S-{J+BZtF79NbggnVk$6TeP^6Ha1;i zoes$quFXf+A8#_xs71#L8=77S(JQk<^AF5ERuv zzxe!1sLr^BD8BnofVYYWWoUW%dr&?^RUy5hip!suT!6Mj;KJAhvs3YmdV2ZFq11-N z=_}4>RghjGBz=E>>~zMTXU5@`H`R81><9`EPkGWd>Y*EPPX5&>PByW87F~>x)y_B+ zr&8dRS7*Z((*a9$hNDs@a ze7>?I8R?X@XuSm8ymt7g#MfQgnHe4A5-u0ggDDs+h-LPbPH-<_MD^g@u6ZuzCJ zI^XsZ?4GH$ET2!;en=xr2a;obV}1uwcYbNVpGl0v4OsqEd>cr`(R6XCxkgi zjEGu?qD?6qR*hh@qQe2#1E7XW-T@O9-qPvFJw)({X{;1=t(|TkMTv$ zLt*$JVVLEAUI4Y2#>>19A~q}O3FCtTqb_Cw5^55WcF&zuqfKn^i}7%_E9#fsd3Y3b zkjIwI!KS1!N3|?ysYqUq7!3O6-mM^gn^-^D@Ge}Vl$4mqj)#;S+{8rCBOQd-W*gd4 zGNKMUY2uTs;`#NWB)I(4+vAX&Jnh(h+xvLu zi#F#L*zp-bUX5qw4|Ya2H{uHccx(TWub?%D+#<4IUD8xiF0z*wWl>qqUf&qswvjL{ z117RKh3uQ^5$tWBwiaGhQ-632kzOeX?$4((oG)JaY@xA3LhPlgUP`iAmoWPHGJ9BD zqaK#=BMN+<4?f1DhR|iF;Zk&1NlI99`^lcA9mbrv+#E1h(J{znqhysCYZ`=d%-ZVw z)it*JV1!K*P+vuj$zokOq}XYdy8R)V19p@*y7?^e)Db+Cm&VT{LdO7w3$7rm78jtuvDQ(FJ8a3PIZgsjIX4?4vKrnezz{4o7lVavB%rb;S zMZiOT@-=e{IT^R|2KM}zkq1(%F(P=EHkmOyGkDRPA!mklH~*qz5I*I!@x3968qeDJ zJx}hTb?$Stz=jC4p#!dlTHa)o8kmiVb*?(5MqF*d;^y9^_&fdntO}a=dB1Xk+_xdk z-Rb|V{n4$uj(>StMm-WX^V)B)Rrr1}ryY4?EkWYHsGch`I$1Ec`E-x9WuO@7(bw=mW>+xTjWZIzriA)?f2m9M7{iICLP81_6#S zGuFkg@P5QraNLhYGnf3dq*je%4-&jH;aQ5uSzaNgFVq#|bjiH+F0ML}7!_*Z`@hWJ zRQn~nlQ@hMh=)a|c5ElaNWfb^!(EFubYu~!*d)2N4!HPXTeM`mKet83VLU{zAGc1r zH~yVAjX_SI?)cfHtg1l2ky6gtcj7`WiY`F(iWJgg=*^CW6#K^3CzIFdGG~^Tqb~YAt_`2A1-9aY zx`!nflf3Hw>iGEhUV@@@64VTuxWJ5ON0JkoRv+Ix3ZpOcIHox7%VT@luBO|L!X#Z* zY2^DPbLY#SLhyV{9Y#MZx-?Ur^P$c7=;HC60^%K`=0Q0MGt|>7fIXx>Wv9yJJESP1 zog6TNVcV2GXkvre%@(&uJYKf_RaaqjZhGrK#!kG_zvoRfXR;2=BCe6$V;}<_OVN` z{y6Ewx(;&AF`^T1U4zp7is#}NfzRd^caOocS`0NGNuwJajlb;SC;cByXBksh*R4?~ zE%M>vA1k8jUR2VMG@__Nj~Agu+$~~vlw3!xz#vIS`Ntlwi?XqgEGE0nNC!E%PfgB z@QyOBPW%=|ul_2jTV$IJ^rQn>7T5Dxt<5if-T?q@$AocdSYREM15 zC{)^6;{ZqkEGlmOO3c#B>?Z|I90FwlGY*u)lAGt&OGt)PMhYY&Bq%5}*55FVI)*mO z0fj)Qk9^;E(DTNkd+Ihh zdKa#Dg9evqh26O}ZBVwzP-24LOo4LJi4I>#43pzz(}9e$rP6$CULlu~9Q$Yf3k%K4 zhloxxB3-d?sdyk$iV{~sF16S9tU_gsW5%7Yr5x@O1opJ-?II86*PhD;4Y6gGwxA*W zyZ=FZRe^BvxJ~=BnXubasKYNbyxp7NHvwTTt*L-hs=4J^fmn_?y29q}Bfi0U65i(= zNk-{fnB{MZ-wmt3k_m?rtm*%v_y7a7-sxLN7Y?}_d+w>TA7=gn!5~X|q)+=(K*yk| z1#N3FUQvM2&xTs_djJ3wZP4jH{YNn&p+74qlVcIlfuXMV03j8Vhe)WIUC{hQLfm;I zhv>YTWse{l8Vx|@p>}wLMRXq`$^}3~vTH$uQ|Sx%Flpw~Ho2K_;&4!SlHI!YQ!5K* zBE7rLD+p0gD9np*K_wUiy1`?yruo7CGi*i?B^j^j4*n|uK@1W9C#)Ix5xI?mByP)C zDEAmQHIx(Npe@FTve>`OI)2ak$77hH5#fuqrf^w9* z6JGEHqs|%Yn(4@@PHyefZ*Yt4+@n=o3VmpuHRKSm`340ME7M-Z4PO({dH_R7ig*Xg zr%N#j?cv|lvgHq3>Z(SOJCn^=&kr_D%!Wh2K@*C;VlFx4j3`|BY{yFB|Cnj?Vf_3} zQ3<#O948_RCUn~Ne){pB_4ZLEn0rc%?IB8gEt13!ZQN8saPW`n!e;P0isd|i$urjq zl5B2}bp)t>P@qGEzS(rxVj^b7Y0D4iB1qk)k?6$XJ~EH3qu=HW zvV2&{$COV{?Dn!HlOh>UH`2w}H2M)3I^^ZvJq4<93kX4;;=_SkxJMHUa&!7j9ikw> z23=g24xD5oXAeV`kB{Z=Wp`wti*XvpD8#+u^eF6N)-ZYt=((aPgtH}i!8fJ2T58>1 zD#U?v!=JXSa5mXOI8}#D+3AQpeWo}C-gN9bk=goeRyz~W>v1n8U!xXV#1O&Fjb8VwW7_wnsFgMxGZ$EeYp@7x=6yL79Z# z^epVg`h{zh`lzn|%_9W!!yrGlF1)Q!93X4(dy9E>L+RcG3=Q|Z?k&GNd;Z==0rPjN zX~}7gW%Tm_=L`Sop`OpXwzHC3+PgvzpCa{S6e0%-23JpEv>E@1R9rFq8UEFXt}X_+ zJ=Bg~?du0;XEj_#ciCIi@yW1pQV@x{#eS}x1DEn{d<_V5(vfQ}!-{bg<;E)k0Gtv4 z4@lU?{qM@UVGgfVlUGA&`YqRAP&=_H&;8n8-bww zgVYPnKe!Ju_;wUzMt{{|xq-3{1w+;*f!y6?t zCAOfJvUC(-*@gYle}s8k7@nH&bLdM^P?02)6`Uy2Jv!d(&#OH&@ya4GOWSFcRW8_N#K$bnTWcJ}|s zo{}nnx2ctu&PcA$8I}K4y|;$KKSXhK@vq1E<=Hse^sr5~u(B-9307}aCuKf!U-`F$ zee;kFS(EdCs&BwtS(yg^t*XS<-4l(3$MY++pmz&+YPc(%6JwR%mIB5?7oHVK7t2uT z0sAmUBvfGkTAMW>pA(!NYMMwoEUarm;E7wuEZ!>YcTsbzYK|C+D;- z)`ak-VeCos?_z+1Ma1TR9<&r`Z(4<#8^~58tsa&IY%~st;49+ZCz=&Y*vipC>~q!Q zBUxpfZ-qR{YczgAY&ZxuCl{7QDg^kTSHUp6uw|L26Tzm8iTri90iOvVPh06Sh=D-b zD$*|d-Efu*cAWCSM^LbO~g9_a}2H9XqTE^w(F6Jbi=T@7CW{m_GCJ5euF)I9q+G{S3*Mo@`T<wf6uc-T-)xNZvCX ztT*x~1GI3KPjUTUkG~qn^pL(?gcnWQ7Jk=CH6N}=bsz!IC(~x^j5@K>l&s}+F^$9# zQ!DN;fYGf`uo@DAK6UJ#Bpi=)r_l}%M~|Z$%%|V*7ZM1{3(0df%cfSmx1!GzQessr zz!svEU>@RZ*dyhs9#nk%deCV`8MY(45o< zi44C1ka`yLV7X8z?!=CcbA%H#S}Wl(xhBvM4F2cezJznoJ;n9s2#DlrsW_Q?$Q*er zJ`cr+2&?XCW@D(EPhsctjdYdBgDNRB&HNTX3j+qF0Xi7)#jcuwqdv-*xN7Mc_WUd@)!SAjxvuW0r}ejJSRK9W z=)-@yEWfu$%a^C-^{v1zyZm<=#)~w#85yT$ELo5VvIB8# zwsNxf`8Uu}q|b#NlZ{NF$L1pC5FEEjcw3lCM3X*ziaVU+q1p^xBq5ZB^<&bu0#(vr zjQ^a=LnD!x)#ORA^zz#-E2_maVEU0ua^h0+$XO*LqP8GqWE0% z8!6ldgKPp*I$@wA#<&K8X|+t!z6#%G1oOS9&!Q_oh}na=NFf(&hG#LmP8nTgUzNuZ zt9Up}FE^XNq%!zLy$lIWj#_OGE*U~M`Z9J+qqQ)GQJU;I(Fsl8<8F_bDuAdmw$q#6 ze%#LYN%;}Kyw^HMlX#@t5Rg43o0CLm0&|o|seNqyALXxB@PIx%xBmY!H z)6hSxA-M!25vK|AVnD7G~WWPQMA@)MUaMq8~TUAR&-8q=L@ePM@jPwj8)LsokIs1Qz5zr2b&P zuJxgUQeKeg+e@j{vvDXUdKE zHvz8p!*jL2v>J9xtATN?j#MwRbCJ5b6+q3r+WmyeqtBAo($zIIKCa}`dB5z+1nKm7 z#5`A7ZgOnsy(9$4;wJK4I!raI_CT)WKm0eqj?&Z$1)kKcy*--DSjRpHK{YVEzO{RZ zwD9>e77k(V7ySp$a^6X2z}z4$YssQLKgl|c{O%!S@_W^|ekq1dE01Q5+`wR8dMDwd zIDQ`x2&1xpn9chd;!H)YQ~FY$JW6HRNs*Rw%8&n^sPgwkQ30s~n@Whfs+58EjYvA* zlsxH-F&n*_$l*vHzj4XV!Tp&)JpnmM4V>$h&ChO~gILooJu63z<8smHI4{jcfy+1u zHj9c4)aTmXL>mpa*E%LMS3t}Oi{#?a`EcBFsVo{1j+$ryFsUuD7^dckn^(UZJ(C2j zDtgvWI2|zcP2H<1&{Tw6=q7&TNO2smcV~eU94Ed(T*_OxR38Vi!WIR_IQ%q~i+{8G zZJ1>JSw4%n7ur*3CQt=bE`|74PvTgJUV)89FMPdJX-UeZ@Fych;sF*vJhcmL2<+UB zGuq6%^G|C~!iO$Bvgu$KX+#(q#pF+#zZ?ijChVds$e2)NZD;t2{hcd|N{pC`Q-x#3 z(JY^88j5y1bLRKVT(PUixuhMbHK@u zl+5TXHp(PYV;~2&-=HOrD^%0l=N&8oG$!(O@TS{-@Q%J-vOTUCe5Y}P8B`-0^y&Ll zP47NiUdZO&UAcSI?)UM~RfU*qw!pgPZEWucud*pBPu94uDa38RkBo%}nSD<6>exg< z9JQ80L7vXDlavi3D|U*;HG{-*x z;=3kZ$GLjL>O$*(z!Bn*pj!K~hG`Vj|7kY&0stmiaI9;oA_?%<1;fyoZ^dgmms5+phZC1aECR{YN z5zHi>hcMA$g6uKD~V{A@;}q~RWC1luZVW!Jp6Gn2=Chr z*ggbXEO+HwXYw^ET(fHCZ0?i3gSGI>t3TpJjltP0^Yr#+s{wP+x8pb=>chzrWrGn8 zr$j&Rf#c|)Q)919YY2?d6G_;whCTs|qwG?S@$Z>y*P3l%K62+do`j-DQI?L}xfO9XW z|HthLX~L^7XYphmKgAx-QxZ>*oa>K?mmSsrNqkp|7+)%NGwu}&Ovy9vc#;Z`d^u5( z)sb8h*G&lj0Oa)-_|Wn>iIhY1pt?s#QGjv(+gn#6l?!eaUky5jyk37G!wK_?J~f}| zlUZv??X*{LlknEzB?b_Hx5{LoW7isESGeb0+t&3HcE2!W!gZJcxWe>tmf6lNh8UPT z!t^%4(SSk#4CF=2Ew=^z-T~Uo*71Hk)`H<%)ydG++w1eg547+;*vqpvkm&0s8s4jP zx_{qbPf4G z@mr3inh$xg)N*4|_mWGlLLmhU`Mri8B@02vxNpv0l+Z+~>FxOnWhBavIob%Vq8p*9 zM>3|x!W|04H z&sUI^LH8Yuaw)DP-W260*v2a2UYbJ+Qo1V>?4Vzc@rIBdjPa-}x@LWYbtzK#yP8PV zTd|cCifYwV?hrD{T!4oFY{h!N{?lSCN|&sbCnKBdZsxu}l9PaSQ}e%l0XF9&3XV{f zT#ZZ+v3M4M~iu=dMKloNUN_}9{|`@G8&Q~$mWD?J3P<`JT0CU^=h_C4baMhS7EAcB@Kw-LkmF`Q z<0tw#=xOtH^0lGmKEFB^@2nWCU(&>i?^LLO8&p$Qb4zYWzrlyYe&?Fqz*#*pCbRXM z+LNJTu>CBz&q%YKNU_lwF7-&X7=8_gJW(#1+b{PTw}_ENi5+o>M1GGomeH71&4E6G z=~D#7Y3y_unC3ca#oyV$UTK-b;8L?r(Tb>TA+shLTR4H51yq-$qV12B87|C!3EsG>!x zx`~ynSux>Y?|@!36W;nNlqvRaD)Sd=bpVcIj;1 zxON%h;T4>fm1U)-248IdzbwEwmDX1B2~c+ymc};X0$Byey+7n8KpgZx7ZQ-;gzWwu z$dfp8h#NA^CIk#$Ko(O#F9=T>WMC!7Jh37?bV4G?K9-dQrQPFSV2N^K1Qp@H_S^d& zWUw&3A_VDLOrjX&u)8NLNFHy&Eq|gKub036I*hca82bTBl64PPpF!P};qEY`Hx;XS zt`%0OF(HR&k>moGZj{0;yFC7*JLkNf3;AK%0_XZvu*ENF-kWIyXE3~rB&ix3 z4+T+l0_y7F?pTUj=5I6Be}T@MmcIlU?^wn=_xo+%v^15ZQo#iAlsNRXpw2@bcb|9T zOsO0xyqbPd=9-xh3ro}}rf}X6iK~YI8ABIlkABt9C?4m92*~lxp+!MWOh;vj8lLdB zBk14T*U2X%hqQL6j|M)N>u!74IePfeP|fiJmLf#Ik&T%YhCXV1#}lje+hx6Ll$8y z5QqPdcNDo0TMb8v{bF~`t@|tDx&S8!kq(eXnklXUl$gOzlI5D7iZ<$|CwFQUT$0^& zLDWmCDP4t!Qb~3T7f?W>e8C-As-O{S<>VYZkAT~g@@G(;n62Ai5}Dl-aO{VRwFn{T zLFC86ci0|T2>8YNpv%bd5kX>&$x4B}1zJEA7ySe6BjtD&j)dibz{jTOLcSJU&-o7= z?FZm$Pdi8N*K6>1kke&l1@gCLllIju;8E%o7g{j4svfR(5Fp;#)7HYVV>5GJgR8^J z*uU|O7SO2agF=feC_*r0gS|yr``PD>D2|jTFuD2RQ6+3zQZ13xVHtzTFy*gVJwVZ+ z8x?BvaWlZ`pXfu+7~C=?y=|R z=SseHQusgF3Z%-jv6PTxoXLFG=W$$M!29p2u%E}Zn~i&}^-JEmG$wPGj8{uZxGBK} zZ=2^#`4cK<8Tv9+aQ$*6 z+Uh6G(om)Ok04~^=m9N{#Y5p-$%C!R6Qx~5>g7E=dQEe+Xq3dU{m zZnhU8J7((WG;{oskU{W{p7Plj8{zZpXz>ss9yv9EKZ9O5TzK>peNw}%w%`7-$(LIi zlp)gCdJE*#h5X1n2S9v)4;bB%DV)m(NDW^(yn!R);tmk{7$;+23aO^U$er!NZ zKXJ}WB1WIOq2zNJcKJnj@>;26LE7iGFSlv!`ZkC3!+?vOjj!*wUoS5%p!SJGe4nt- zFDpM+n?Tv*?9;gf)|KTq0Q^ds99y5)JGkh!pb0Z6thyLbdV4#<%BnEgq}(^R#qV_C zF(Zqcd=T<#MX1GavVn>U2hyVM(pjYAG(5YnIU~;We5WNM@)P_g^MrHU)L;DHUhsi- zr)17P@Opj3MdJoSXv%?UjXF#Y{@!@gXJ>Q0VJ6h$@+JjWn+{?LmPzcm)w^v~fJxL8 zeH&n^Y;T*|t+b%8+uze&e^6=+n2^=7`YwZ|+Kj-XGk69i%5A^8= zPYlN=yJ435Az8pvC1+Y7m77uSn*5?ej>w=05 z0vA{u+&8cLWf55@Hto8){3D&P+nEKWqXo?=3&r7vk<9b&3~+JM39|u$*llm8v~C8( zU)*l(J{-A9C)4FN<>1_J3f6`(N-|y|^F{UBA6E|zecXE`LczGOUp~q9x zJg$>;%C(QlTwmqIGz4N9*=SchnH`hWE(nELsuBLW8Pbbl*X(UK{{@VusTCalyg(Pl z6sHM{*^h*jv{pxd)2rM;pmEV| z{vp@@(Vrca_-Qjl^zDYy{=5q4FD-WylP8z|Vbs}n5SpPY8OHf{27aWzE<^Bhqqxd0 z>rLP8eM!a^H+4Ayj9i^(faQUR+8Jg9_pLmU))hnf2V{1~=1u5Yk$6vFq<>YA!g^$B zBRlxe>*gDRMvVOSZ=~by#1S%o5kkZk7Ib0Ve7NJzXdiuw?ul08w5h>QvoW6vwQZS` z-7OjVTCc(^kKo*FmX1|Q#IX&G> z>v1QzsZo>b*zE08H6&;1rr6G$svshEB2Vvc>u>R#-2M9V{29Fbc%D=uQql|3WfQaA zRPqM_D38osDuiUwLR5*$=AX*nR>nK9MFMl9^|eTHde6=)NemZ={nFWPjv>j%fVWu*x|eDe?67m$epS z$MMcKC0H)}>137xzfrUP{qpK6S!yT^U0nq+h8{mI8Nokh07+N(nQyl0nBXf(SKevd zWx#&i7Vs)iD3#}{+I#__ALm3dy= zP<*|cAA$444I$_vGmFJBEN9(M}QSd`#2Dpp@lG57;R<^+N{5 zR>LiP@VV+7w-K>ZO8%5x3)e=Cpz7t^{j|=wH%G)4pBp_KP{#vw_!Gl$ zGyCl0cdgj6o7v&$MMuVGINq`suSE9&j9C`womPz4hhpAe#E7w_Z25c7XaOGmB%g zQdDjFKPlkLVqOAzUZLjRR32zz8)(!6pG7ZPf#%I*SC=fm3!>qEc<=F^RegLOid&NJ zmz2$FT{ymRAubAjcq#J{GO`677R9=$T4R!%Tba^M3!A zukY>E704_)6U#+M0xGdPS>z+lg>*(^&~*%AcE~9E;5a;p9JL$|1)pM-d|$SD*vfZUX&b#I0IGty!|7bqx@b$S^4<@ z&_zu=w=E6S_Tt(uR5oub`_Vjwg~|Dql)W89@dx3)-8AvQtNYEPU;&h94h{E1e(rA& zGO>~$tkUep-B~7wOGh9+(Oo$6+1dA+bxVNI$r6(ffUB`#kXt!a_H*@iYtuLXWbSvY z5RV6gW=)2oozddvAoQ;p-ZeVBA=&vD)+Rx0@pD^a{NiXW7XVZA@)F-q=0a&fB{PYt zSV|Phpuywqj&J1iR-7j6Vn*?(<4I`*VPE*eYo&LCWc(VzPwh&p4|i8rL8orfXr!Vh zt@<)f1xSQ&{s>fmNOJHvGYcByR$1NC70q@g|NQ{HU+88zr|dB>Bk-$HjD6hT+hMtN zljk?oH8J$0*A7HEd5o|D!?zfB-yRVli|jRD99!y=wCW0tst76?n!Z2gzT@YX7SKU< zT_3W|c*&Aw7Cw61UW6t4_rQ6(y2e)ib=~Sb-6EfAVg_0XLHFnDg~x3Nf>!`lr=z1o zu_ege9c@#DxZv@#A^Oto=z_}Pcizo&OR!h8+qyVnC=(@qojWn^CxQ&1e;|%14rAV9Gdi^Q_8%8;dn4wO$QT{1MFhbFA3_>|S148^6elIazBn(D*d zL8;BbS|CK3gtyC9zA~hH?{OJ|jTOv{(YD9=Sav^^AJC%NXqfn`1TS_!byk|0#;nK~ zT;Tb|hHB`X)tt`gX8<<|-G`pfkm==1kC-Kv34S_pw0xBC%h}oHYbl+@rG4z#6B1F9 zoYJP^i^}AOj1Ymfm6iVNBqj|H4_982)In3%K3JJ};{%ECCAd<(=sw5r?GaPvc_@9k zNg`k4Fjg1eD7I>g^)UD9b)V1jeUuSy2bYK2cvo5pcL%5_zcl3^IP|&4b1V7Y_cUkv8SViNvU3Rq-oKZ_pAG@uZ%gtOK(o zW+f0?%vPl%k`kix4mQTW*Dp<34ToIR<^2SB8j=e`$*XlmRlg0n_}plHo-Y)U$~@yL zsz##45wXQ1wRZUbbTb+?y|JN!pGef{Q74pnMzNQ^FyT&z`H6%t=oKwB?u=uxgk)IX^*(#Gz5E2y@?~z6L!V>duYL_&aOK7$* zv8bZLWAfZ^6}oqO&dnttaE`)|0rmI5_BIyANEQL;1JFj0G9XgZG7U9Tcn zk%}K=m&&h6bg|$H^Y(W9y`|kZU?||!4QAiF!_OIwdU)=1yfWP3l`3p)tATdC_|D8> z?gQF=bzZULESFVgSd^eCdA4i`&Xa~<0kJ?|K?N<+?a!6XxO7=odbG%B|GhP~@4$Wo z@_#?BPC#)5o@-!c9=PzcYyN@?qr1HC8Mo_%pCaYs3v7}0+Mkn5a`^@Hhn;H2g>YD+ z9(4UYJVM{NWN;!>snUD$d4Wqvkfh*7-;<=+tft*yx@{8f(!BCy+GC(7?Lk(^5#)^X zPr7_P=cHvctOsXzUv6yf17{KCU4v>=1@&fvxd0dcw-;LW$ zcde5vlY@Xu)D&eIwp=r@Y-;BCCX@)7WCg_^`{X5*+~aul$9jmOupca;O`oFe8(*mcMQ2qrw({a~I_ExH6e0nXe06;ww?>`884B>BD16N^@HGtu zPq|$j3bxD#KFJV4j(_@LoQ;#&wIph>cF9Xud-H_exSJ4ru@&~x$T_ufhfGOhC&N;v|oHB~+Ng7FEx$^h{l+}RuG8TwcE!ho@zuJVBSm%ZI zBbo7@|B8Sk#oEOm-)2ddb@3sS#-v_>rOy;xxypyw57Hyp0eIWg;UD%F^!NhIG!F!% z@ul^b_H8oiB-%$`#dkDgrDvh$`x~xWX;DUU-xqJcK~+1xp#-`U^e8xa!!$`{TT&NRPYfAoHQZ0ydw2_ zy1)>3eC_m!Bw>hQW5JDXvB2M~nKx-(HU@Nf@_L*vzxS@L02Iq5hlxwr(7OLaA1Q^b zdDpt^HQ!$2%V^ijr;aqcq;)D8pOSME@qX*BlOYZjOv|Fv$4CA+R)3FMo`Mc2NXmfD zPgoo(%E6-U!g~>t_{H<)ZLcJ|u&Bs*ZJS2X$;qw8WZZxBd=4W= zVw~iOVHwf%;UWa`^x_HWKGaPpA4KC`v+W(Gn41z6q>BBg)0?odRoH!>bYr&R4+zvH z!(Pzma53h=jg)mv;YbecsDt*tquS#n3h|U6ftWv$y6BYjh5h!Z{ikhA ziuxtC)h74ku!-Io;yU)idxBVf|J|Z!N<7v^T#)-zLCY{E1)5cYV9{ zcmp_`KV<-*3;D_ZkKhyuAp-0fjoym_83SIxv=HEabFM3Ww=W8mJ)-{qc@kr9^}MQY zEf87}QWsGEUz7sLS086jm>+NSQrC>mS$S;C62nK#^{_ZbEqwoSiZLwTv zY7IpkXMRTTb5CK=tt#gc&8-Jhs5f!P!^VQNLuMoO(3aK=qYPKKK0{oQV&* zF$UKxpVk;wJ9^g(IQuK#FP2zu{qui);s%-$o|eGnuB)yT2sg=Q2|GSPj76+PTuwN< z&I0@6*eP_2v8SJ3+<7@R#^O>~zG#Ev*Md0*Xj>Vi8-TvyPfJ}PHTVovj-{pFJ)WQJ z2TRkRs12M_eurF@I=#4H3p9JB$H#}|RO*$k=QY(wm8RGt_sm2D-8dUdHVcz6AqIMU`$SCsNqI z80>C?UQ5`C#5D8n)}_aRCO}d|$*OoUCIk%bTpr$}8h!e|`&8>zjE&Z48Zd!rt zGl3psR4Uq8VYX$|Klc6|Vog~;X^5=DSS`YEq>MF5zrPj?? zpa%rpaSUH$0u9s_WPD=l&)ISCGNi$mrGjpYqymd<@X1ce!ZJboZi1V_ia3V2Kt`QMrtUs!RTXa13eAM_R#*G_`DVutIw~O2hM^h@s6`N`IiEX^1&Efh^k%oOw|P4r zFNx3W&uZ*&TXa{&Y~eNoW)CCwhb#dz&x-!K1d7)_d2j6cgS-2^C4!h9qzGBUaMbbl{T#%Tv-_FLx~Xq;)a&ZU#Le$=dW= zscwR6kUIX+0489j0>W<%GW9L+9b(IO7~gwNndwzTO<-2{qqUdMPa^)_8r{$=2Q z>dY5*Sv=Pu|$OWrM%EPzvkAQs-M!bw6?*>rZm;BJLfj-k?&hIIH53 z%CVnUjOwqVN|~D@N*_M07LbpJ3HmVTS;kaq@pV{E=yOor09P&&Io$#QvhSR_c(}aS zQT5IVShT=3PLck`o=Tcg9D{j+Pfj|4?ngeiu@}c!awt`!nKqO{&m#yOoUf~2q#76J7HodIc8$IB9`D!MXPskFM-@S#)6M04I_Vti zbG^SAW{6#yLWK`v+QGy)^E+>~+{DGD^tEic(C>qpktiQk1#3l1B^v+bv!ddVOf0g> zB+%7^QstWy%>MDixJxj=+3Q*bt+@>M1MbJ8wjQt6KsF=~31V&0Cc3Ckh&hGCO;EE_ zM#ItkZtXCGwX!+XM%v4vbrFq7hXbv!gWqo%SS=V%C7UXH@ zGfTu%EZGW!l8GXth4#@QD+LUeK(iJmmmPd6Q9cOGMtS9;tY||IEu&?rX6C|HjvKU} zo`V0ggn#vM0G{`&f8Xvd+{A=7dgAnfRQ!|xg6XHRD9k^Xyiaiy%_$_cqNpA|1#t_N zLR&GEUtQz2BX;_$UifD6lw6(NFiuMO_rdTu`V`Nd(%MCUpe=tRq8<9_(U`;J@<%*x z$u-WS{k>4&{ZDf&NfvTUGhG4k&IWUEN?09y##qoYg;<8dc<12V<4CN!#|CJCd64={>60i;T?VMtF=_>Ktj2(0->7^zBb{e0odX&*S z+5|a&DHPi;cAJk04*lhvF0b_vFPjulSOl=MO`S}MG^w(rUpVk72Hl`*x}XBu)<(TH z+hX#TyxM4^nwU0`gyKb!Z{)wIs!2xkZVt?DG4VbxfQNDrbF=X^BqOX#&ms+X(jt?KK&8di8)~p?(SLm%>MlH@!B#5hWd6-7n%j@1mq2rr(0)h z1&4&d@Lm_iWUM3^?0*t3N21Gc(HH2xJSYb)rH=vImkD))|C#CS&sELf?%FL0puaUg zyd0wVy^MbSPY0t@on~Yn)JbeC17{3gGcYiz*XO?$BzWDK(BiGd{Vyu;xPaF4xet%U zIy1;I?z9t>9cE)_^7VWwMpy=HriHZm$S6ae=5h)_jF1YjM2cEM4PB>2y}0oq!>s1v z6a2cpbwr@gfjrBseq$gTHwqP^nD7T19@kXmyf1In*_38Gy6Kyv6{sf{5L&reO~YRPqyQL?c<&njsWz}lc+Zw%gGLv55cVlQCOVaCM?v zaFs2j1ao^)!_j6?bw$TkZHM|vEq|35>hwiF5!Q9R$01BPRxTt&Z6`>Wi&#A)?_8ip zDo7qWqj*aAG}KzzPezwLxCsgmKiL9|(=FEd1vlXDj=M!DbhDTi?jk7&{14XafZc_8 zeiZIs6Oc39&@Y%KR^#UzD#L#2?6IQ(c=uBzdSj#b-2O4fUA`qXa=#MTpg5p;1x`@H zePI$lSq+l&!E6)9tQFYb$!Q=>fZZllJno0wp$MRm6F-B0iKR~TJW>ri1gOJcU`-SL zFAIQ~@PQ29Jkvt?DYfu82f8F1A3)UGs+5=#5y1QuPIL-EF-NIqq7>6$L7_q4eb8YW z?O`tcI4A{ypl$D>&STKRpzitU(sVQRG_pmZgDn-dkt!)FysW8;zY<(^2XLa;VmA~h zOqNoGSES)R}U`>Gt7 zeuwjh8;h+r*xz7ZTmMXQNunplNs>Ku$k_)R1HjU>EL>b--~1)2T~zIhr}9TZM;UkcxaK|Y zdJW?tPmesAlMK=4p!1e;0DXg5CPHZj!t_-G8eG@0^^%?Q&#H(|K@;)P9oa0Ye{-%f zj_%Mo{N=9pkyBMWTN1)D{`k@3eBR39{a%`IKatJEBQHon7{a&fd4w!;lb^<2t^xN zLEAC8@BAOM{y&^?A>b$@oDb@{Bf+1W82+}a@8Ww^Px|^`F?y|OQVlv4xDU*I4(*nP7WIg=PlwTzbmDy9YOEE8-byBjep@@XeO(4s{~1j$x{4JH&ZQ7Dob6NLV;@;?MWQ zw|Dlz3sFEqY}^l+hbiK5DQLVb-rd^K2n}^pb$)5L_}$|gR2w}yS}gqy&+D#%0y~F? zZsd0Z&SMZyimHWALW4Jh^Sy-yfQpZf5*Y+XaR|nttSAb0t|Q^UW^O6g zbxenYG3J!x1cu6%J`;)_weq4971 z4Tn6I+s8}tu?K)$NjtOs@D{}B^LPcP9u=ualY}{1k$E9(5@Lo)Nrq*`X#yT@h946H zOK?ZHu+oIXnD1QRmDo5ENeInEMz*paPQAZU;Uv%|ldmI1eS`-~Zb7h&7o}PgN?5e! zN8(;Lc|bPmiw}9tl+Cd!DJqiZFO=vYEmKr8fPBuOIf}E&IW0(70q}k3zxm6DhXa`^>kDC|d4%)z&DZDq0CqkX1fTaVzivD2yfxB` z+dCAJrk%=u=59C?`#<#s{XUKTkB|5fHKc_9$uFR(p}E8w*>`J@SdeUJ zpoup=3!K8iNuHU@pcA@*^@bKN(ri9^%_zh2^`DLr2j;E!96kN&te{T<=6vh&SAO@v z9<}LR+3%O!h}&La=#L!Z1kpu*^PcIYk;yRy&OL*4`DJrb7SS4?&r?_W8eMtlt8^~! zW+V`;3MEf&ff2pi+ufp1g{(9q==39B^)G6c_&D(g`$PU#CrhLfeP>ByDfl-&&u0pW zk*udfq`$(f{nyLZ99WCR%om4@Pl701Djw#Rc!-G={$hcRpc$&laOg_|`!C-ejmi~s z12M}sk!nX(7w60yjjj$Aikwn^Dkv5$VNvNq6OR;&@b&&iIm%^mcxu`UJK_OE7LPsA zlYtseoF3?gW?-;DuD$9Hui^pF#ItL+QD)uG*OU}jx-LJLOdt7RDXpsky;#o*Fc<``C7d^zDnOL-^6( zUBO|dQ0{K~F6zXhzrf2WR}TxANgx(TF-?4P-a$jh!cX>MtLO;5QVKbI)C-KkCKFR; zV=%%A>_a@;B4Zj6)+d2C979Qt+w`?d)y?U1gx;qQ&)W;{(E(EKxi4?r`2R=KIfhmC ze|T-X0iFY8o$fA`vJt{$_*ozG?7dL*A3izRX|#-_VkEA-zyo`p1opNh%%M94^i7T-?bII8 z&3OM=G?w5rXADDbZf-Wil0ovD_0FRdTtWTa5otZHT@rcaOME``i78iAjPEp}L3mtm$(G8>N|UwC zsOOHg^ASf(C~{HX9%i=OzWu=V!3{I~iX*9CMbKuWo)UN(0I4OVM zriY!D1?&JI7xhs_$4Z_h-76<+X zH%!u0U!;YPMnUJkC?2)&@V+9<7o2J1D}mFsk?*z?(D(TQRe3D|qE(t3uL#r#((N<-Cmq>>N$ zYM5`r<)I-I#wX^twcc*oQPi}RUop+F$<*2T+%!!l2tSsJLw=BzE18^Qr=f<)}%>sn6XNV8%mE`Yy3wo@8Yco3G$3iSa|=5^gCJEYSzETuv`B&mSeuuaOWm;t+siTpw8`#>t` z=R$LVzYwt@0$b9<_SLn424pqEjiitwWb=5^PWut;GEk*ol&d2ytd7I&nz;x26#qCT zB;T`k5Pjhy*o3_iG;a@<8C2ibMDur>RNnGGL#*=z&flDW(D?b>44#JrS z!}+J4a}4#I{UOxL!PJJnvExU4Xu3b7kk1$VM-on^&4l9>4#ZTrry)+hiA!ugZ<7Gq zT<}xk=@${C{x6S^je0@MOg;SU`Ds(l8HGnVh|D4iXr+f_Xnrx>_C{LV1NM`FuRdnO z#&$9efv;W3;dwVZk@J-YMxR^XGcx*ybE`4vC}AjsBCqEX$2Sf#Mo(pTrO@q;l_?E0 zgI|OsYe}f1_<#KlOzp0Ns^aIx)1SAoP!n#CNBVfU_${4n_1`KjyF0KSx~PK>dzXkPY(5H*tnRzN1f6+u!+EXu|h|nV9|(_GOO1w zs6tqqxQ4Mbf_eJIfi%JHY-L(A{oRztvYE&5tctOM-gaf$Wa5Gp2Q&GA;ip|tZb!2X zN_NZOdR+3w#f4-N)&+iEodFK4%lf`sr{4#h^fB}L9Ym>&#vgFU!%xN^Jt7#KN?WxY zoIi}@#>|m}b)Vm}e})pl|HHO!B-}^-hwj5?Wi8R2I5-Ry`sv5LZT;D_(r6jz6@#BL z8DF9K(`QukSVg(7C%gFrik(&y-|RAvs4ZVz1&1bP8W)>2ZT4%Hu-|D|a=7vI?QKeX zx$v6=;sfzy>p~zG_+WM-YltZoVJS7_0<_!SrU=A{Rmw_)Aa|f*Q|coA4CN8aV2T#% zUd`=tE6=tnXKuYjUhaqoOw0i$)SG3qzQ+XRcoeS9;1F5#vviM@sq1$_XsO*QQGkrrfpEPB1MZx)`Qk7^ z^JRX0g%x%J&IZpD)PplP@w7gFpIJUDSTX1(`WrJKXc%y6l~lI?%pJ4wRG`V!U z`A#ora4y`!I_4!z4-z9E|+UZ^((Hl^NJqikM?%w^uoFtGg@Y< ztk#>9vcq2AoDq!H-QO+jvLxhvo_Om;jwZu;_+cp@4oZ{5j^bvTZH8`HIos`_UfhGZ z`K1Vj$BZEna&50ER|?}9_CuDVPi~-hm4l8(J4`JpRL750Xb!6ldF9a;c$cUA>$@f9%19%AKz^ew-d}ca5kkLxQLjUI>kR61O=Kh%fPJF&VvbmtL9s+*jCfU*ZEHZGE^K=5mub-}eeWA=@en=D~K4K=N z)P&V6_D!Ch#z@c@L?R&F`{NBy5A@MiHG5qJDhaT)27RMu2q~72e;_LuusHaf932%3 zT$wO!1}9|RBwIOuxl`o4h&b_IeSqvOukr6+op2t|PzxM0=25x%o={>df9Iz(t!6zJ zm&ixviQwil-H&SjKwU`j-3#)Xg_ca=d z554zgt_5!8C1kV+Xkb~6=C7jot{p8q3X-2_!G(;N96}z@+eh@9-=5sFx;BU&Q5SYv zSA9SObHAmw_H{A*aH0HxxiQqe9cpjHps5n`wggX?S=#P5#OIl3PUvH%98I+^cj@%~ zX^35>$P0(i?2fyQS2=DRq6xd3HUmqWLGB2Jo`&J9M2>^$07EEfF8x%-#DwIU88AfG z|5&nX?t6PXOG@csxfTl17>*fGWn8*^_=TEGJxy0wBMXP@xs7hqV|yMpv&qfw4&M}9 zN0qq#&QOGvh|Bxy$5+>-I-9LS{Io-hGExS~l2n2_%=C+wskZ>aNYDEI8c(HNsG3F_ z_Iu$_Y8Ok!AS@%{d6m;Yesp_Gi}M3I8d!&*B`}avWyAfeHr2ev4O=%rBqT{FvS!@{0KW_eH?;D|r zuY`)ZloiUI>htU<^bMd2UZazu?XZJc$oznv>hB?=I^1;k$g9TvndLY7_&76|I^PBs z&U4+^`Bv^Mz8Lp-vHo?LR5QucKq@|7D-%N!HgDc>00DC_+iXDgyxva$)2;4sv-Thi zOv%`@Zd3~WKPdzDT?b5($dh)osXR-)a37ECMeM{+46AY|wME{y9RljhkpbD^{?R{m z?OnhmM!S%MaPH~m8YcODM;zs}wD8zt@Z2x^kKN(l=|c$oAGhFJ*N?n;m9fEuu}Sz+ zT4^RqFdB``cwwBBS!+4Pet^~!CK#$`c^U4dT4G)UVH^1WWqn$B^m{lxb(kZ0nvvQ7 zk)jE@{~UgLMv>;B8!S|!=yh2-pXH8_4@xhAs(gZK?4*!nQ(Smn=U=$EAp3r^xPi|K z zWZJ10`uK3xO!yGQU4k1@@rwZa&YGEScfo2_=??$9taUUZ{N5ejG%ycc%~O)Ydh4f( z<)Cx;bVvH_$2trinzH-DJ9n6#J+xIZ4{tnRH}=ZrzoR)T4sk_Vqp$c%!ov^|7Md!5 zDLft>d{0oyPK0XirFO5dF**?q(B&nTZi5O5mCpeTV1)`y?>V4r$EYMPsu!% zx`c6J3~PpjGi`~iWkeBk|5C&;vqMc3I_#+ks9$GFtpsw@{rGK>irH6C9!KFD}wRfT+k^9%fyQk@_B5091>Zu>|# z;GYnI?Ksda#ioNqrev=W0b_cH^T5WHI*D7PoDZc`g;IdICf#mH$7Dit;H5XfFT5r$KSaxj)&-o9dBeMi(P za)E1XQ3RHr=D7PgNBT0(usU6iQ$^D&){c_=Zi_@J=q;^igcrf^`<-MCJx+y0q?`> zu~->?aJ1Qen`PdOo0QG&0O3j=Xl#hFXz7WU70=66v;I*3v43V2bY(LBqHmKpX`r5Ej2Rt18dN76!&4$RG@vWD87u0OkC-@z=X+5GP3i- zXLfM8F5|5qWwzBHG3EuPTw_BOHDpUvFFa|;bPjc%Ehua2gQ?D&!|yvOd#23S+{im% zW2w)MiDiTf59!tW&bw!YTGN{Dj#5DH0YNY=8 z$qSyb{cwp>_q>;a*c*8~Pa|24AVJ-9wZ znWhB*bqDZrNq(AA7*}(Tsx9*HI-TwxQNFt^dc;k5p{=d1ZaOrhtfsfus824odHKRj zFJ?|2bv3z-;8OLzont=5UgzLd;(F;l3Fpwr%>x3pH8Fwn;@fU4+p&USNW;ZqrLi4J zyd=S$IGS-+3;FnaHSA+5o>+I9inwHKV?>%ct5EfD3g02avOvhj?4KhkDp|uu__dRF zDgsSW!tJ*ja(&vJ<--i>3^F=p+V`BGFV9po_r{SlH5?LqA5L0Y6=PTvnA|Mf8Y17% zeEcJ=7XW=MjP3$HH>CCfp7MB)w8fc2Ibx4L^JY@$(p`r5<_ve?%AIXlH#-WbobkrdU{$mY!zzr z^d`qPNBR0dpiHu;jj6No@$ii$svxDFq&s^B&rj4_y5e%(1B!&u&0%66{)VwKnE7(7H zhnqS(LyZ|hQ$8E~H;|M1$15nrgj<2sC(Qq}Ko%N0ZgS9z0NP6`L9GkZj+?H;;9cSg zdwkMM(*f>=nJ+#PJvfR~jEWSiw6NK=@Vn7jLDB(i=qCL*VJcAw*ExIarU8ZWSfbK- z8ij{pzs=^*`ZjRrpN!*-Qsl6HQ+y(_>t=#_-706`zHD)xdc9{K`| zg@Ax2uvv}L9|(lLw@zP$+{^vZuUA>kQGhqO9{yn#LX?DT)CZ0{ z0%TDqPJeA?I+Ei44o}b~lssRBOlxxvC34OU!hY-UxAKt7Yr#wD2jEZ7-N*<#;CMA} zFyn&MJ!8;6!85e}%U~v~eC%;co-OGoNnbVAVw41_Rl~K8^;!qj)yx+!qHf>9VI0W@Z0ezrC1LN)l09ljzS*_l@#p@n3U*=>$zQ zV3rYgU-gf7?U8am=`GvKXq5j#acL+ovl&&3N;V5oZrXqM(bn3F4FW+xqJ?6}mcrjE z^BsZSgfCxXfi_?d=GACtH$?pmggHhsb<$BN*Y0Q_x9e7lre3LLfi_N~-iY00UBSaW z`_wH%dYLzZ8*dI}zWPs2k`e;z&)>)~5=5S=5I4Lu5J-EwEP48$_WsMm{M#3EJ@E=F zv%flD6Vzunk2rWkn|#OMl`uz1ALsv97;y~G&cHs7Y+)(BhQh2t$zikIDCR6i?7joR z#dxgE46h0=MqDBt@5(EyzZ=LaHw0;!{^>NBiKs2?#pm|r&O1yz?hx*aW=28gFG*ed zl3zl2Gyi&Ij+r68`7Tib4>!GNuPkazEKcRzw-18TH-3YO&@#>ALh`~`iF5^eX_x^i z;^@Idi}ODT&|{qi+y4Y4e%D*j?!B*~BZX+!jqyt(qvatWs9eD-r2G};A}Us&nVp8l zi*ux9jO89p;#Wzct0gb=+%V|Dw3nAJ`7;~IDx>+@=&Il#;`9?Dg$l+qn9y}aMf$RM z+0nj)Fe}n)RAh(yI*BUGQi^L1j$jB=c?CMw>d3>e*d6Z*1?u<9`GZCHl6tGbl+{QK zj5DEzhJx!GnXLO+;PcG(+1(wCr7apud$_>I@By8W=od;00dbn0{^k<_s;(*gwr-G~ zTVf^>q}JkybTFUJ7qzJoXxjkr=KT}X*Xe1g%X3_!c^IQ$x;{R~7+-CHcT+e9+k7=U zgrgJrf47+yjthuIrq_>Ekr4tgMOUva`}F zw<#zTQ~ZEv3Dc-KJQYfwiXx?W&VEKxZSQdwCyFdyJhvPvcgf@iKr!Ly-I54SlRhZ9 zCI$ZDl4n3_r{NdOx5)BpqMDMpv6f?3!8V(Nm_LDbHf__#My2wfGS?4bQ=@pa7$BtP z1y7<0Y#ry8k*BCXU^*f(f@S0Jf`@YS^h5gw$NzXrbLf@73-}0PM5D@=E12+V?YfRa zR7*5=eX#@j=(F_B)`>rw!eK*FN%YdCzP_*)T)4wv_-NVeY&93p>M2cO29xE9Gk{(X z#cWkH03gThB*O74D1v%Ee#S0vQve22U(v8klmHP`Ej6hBlquT{KBSaNGj4b)j=vdm zd0P0-82bNq0p?NbAdheHH{flRp;Aj=P-s{acI0x=XPTqPrO>00@O*^mb*n={SYVGx znXU=U67D`6SBg&Bqe68Nf|yn7^lRw`rK;?}Qxs3TKHu=w15H~ilgi8q*t{O+uzmeX zIudjrWMnP%l7GYd95HO}&HLjSXyG6o2dnPvVsdyC!vt~l_t5EUNM@_QBvr+mzqzM-dMP>)Lb(UzU|z=kK6ua?jlRvFJ*FXqGm|Bj%uTFui!-3hJET$GLKrM{PahekD;k~A#>6S zfMEcG2~sjL8|Ggde}T%~ZQ<0dYLOV2*HTP^{2w|tdI^wAWpo`m;$=M+7&1nPaX5#Z zyMF~vXn<_}Q@uK@1{1itKi*$vW}l%xoWW{~Ur>f5cbI7jQmJlTJ(pmoMmqJ2bcB~n zE@TP7QLgia=XSToUpOlA5PG}=HxZ*b`>S%P$FZw)7{D3y*MBTqKoDHFH|7a?Nns4` z6OK0zg5wQ6^-&M}#+e>*Zj&t}F~4Nb^eEWp?QN+D@j)XtpOJt>kW-&{l%Ii6?I1pr z(a~X4;k%c;U4|ocKI7?n%3x&3bZ$yrERLfc$S8bzJW3j#U_-o(Ri!h)Z6<3rCOy1r%E9xYe0@( zQhD(D+cYgCBFfs8x}8h}A5)BT(l6G}SyfYuKzP9TZNNi0-e!jTY@z$r24BIJi?U~z zWy$5dK`G4R$O9Z_S7$yl?4*B+4A{|psEVx3vDm6*Bb3P~F@LcZzijld_xL`C0=wKo zLaSjtTwhpI_X(q43Euha;`X;7&t{;1>+MPhd1+xzd@pnNWVw>Rzk@W~kVFbf-Mi(| zQwR@{4{kZ{p@H>eDCW3NeWE1Lb9i{ez(95UVWKYcsg8(Qv$jrXWz+Nbi?CF7PweoF zDA{NhrnKNA^gO#a)|-s3^u;F4uvKLnknV2?mfWycggpc*PetM4pBXh!Dl$0=@*8872CM$cr4$R6 zlS2TdJ6NJ$0_A4qPJJ&LIw$1}jB<;p@% z?O|dbenv92M2Y&835wFGP10KgtCbs1;>lTrn=S!VisG8js~e(y1Y@;Ccbi~b{%av= zMlKsg^RhDAq|sC;dQ!GteG?I5G0u2#rsR|9L!XNWA3)ZfKMfR$fHPRMDTRu5zowVn z_vsn;WwwYYm`Ju8BNx$s^MXueg3Cc@jzL}tL#?7 zpjY`)pvB3UiV-~VR$|ijbc<;PYAQ;IMSbfs09xpq06RmAC!fA^cX{Z|VStjup-7=n ziFZ+}1Jk>XSk5S1cgQa7F)%*HBmj;D9}P7_DE9Xcepib#xj{HNoADWL7N_6qJ6GN4 zanDEe^t>6dFYcC3AQJFwZRQ_Rv-W29j z3BkV}?cqv!2ykFT$tJ)_W!~RgF`y>4VWC$81#BpF56!y74Sb=KLA@36yY=g%c)iQ= z*9{_AsmZxA7*0|pZ3tS$sXa>%o2vqxI#8o!-`%RfSHwD1TMw|w5!^Rs_Y#Jf#xZ+l z!s@bh2uGBn(7X)1s!wtozBiM|M^0)CG*|{me;i|gwg6%M{ed4(FXo1(B>8q?n>NzHt7PcpDDa3 zQuZCdZFhC)I%^b{Sm07Bhiwr{{-(kGW4X`m5Q)^BnMT4IQ6oL56w92?><`{s_mB1>3QbkB&R|lSnf)kVyYydbprde zZf$6j5DcU4YP7pE4pl|`ZCZ!=2RJMmBcbLb+}Zbm-EJ>wjXU|%2f#vsc$AJ7?tdGi z7Z+BL z<;9{ASLO`25?iQh)Z^#Cw>*nZEuIJtA_WhEVaOp}IR-Txnrm(vk*S%8?VgY8k%og+ zd4~U*X#g4lE-n6G_{j`*Gw^PNq}pe@EtVB4F!ig#Cn02Wyc<{Eq

M%2qT6<;IuM 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 literal 0 HcmV?d00001 diff --git a/public/data/images/favicon.ico b/public/data/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3172667d2925fa58eae7e1b1767b3ef11fd8a37d GIT binary patch literal 318 zcmbtPISzm@408$tW3n(;o%&2Z!e96lGuRxJU_-b{+&XoX0LJ6)%sr|BBY?_qMrKGC zrX!z8wT5*7=B+({UrNd9k;oR|sc?pfNL0=7}mX3RI=dX}Q F-W`Jp3Z(!5 literal 0 HcmV?d00001 diff --git a/public/data/scripts/js/background.js b/public/data/scripts/js/background.js new file mode 100644 index 0000000..2d51ab3 --- /dev/null +++ b/public/data/scripts/js/background.js @@ -0,0 +1,138 @@ +"use strict"; +let snowflake_max_r = 12; +let snowflake_min_r = 7; +let snowflake_max_count = 500; +class Background { + constructor() { + this.bgColor = p.color(100, 100, 255); + this.wind_direction = 0; + this.ground = new Ground(); + this.snowflakes = []; + for (let i = 0; i < snowflake_max_count; i++) { + this.snowflakes.push(this.getNewSnowflake()); + } + this.snowflakes.sort((a, b) => { + if (a.radius < b.radius) { + return -1; + } + if (a.radius > b.radius) { + return 1; + } + return 0; + }); + this.backgroundSnowflakes = this.snowflakes.slice(0, snowflake_max_count * 2 / 3); + this.foregroundSnowflakes = this.snowflakes.slice(snowflake_max_count * 2 / 3, snowflake_max_count); + this.updateSettings(); + } + getNewSnowflake() { + return new Snowflake(p.random(p.width), p.random(-snowflake_max_r, p.height), p.random(snowflake_min_r, snowflake_max_r)); + } + updateSettings() { + let allowed_snowflakes_count = $('#snow_intensity').val(); + let visible_snowflakes = p.shuffle(this.snowflakes.filter(s => !s.hidden)); + let hidden_snowflakes = p.shuffle(this.snowflakes.filter(s => s.hidden)); + let snowflakes_to_add = allowed_snowflakes_count - visible_snowflakes.length; + if (snowflakes_to_add > 0) { + for (let i = 0; i < snowflakes_to_add; i++) { + hidden_snowflakes[i].hidden = false; + } + } + if (snowflakes_to_add < 0) { + for (let i = 0; i < p.abs(snowflakes_to_add); i++) { + visible_snowflakes[i].hidden = true; + } + } + this.bgColor.setBlue(p.map(allowed_snowflakes_count, 0, snowflake_max_count, 255, 170)); + } + update() { + this.ground.update(); + this.wind_direction = p.sin(p.frameCount / 1000); + this.snowflakes.forEach(s => s.update(this.wind_direction)); + } + display(asForeground) { + if (asForeground) { + this.foregroundSnowflakes.forEach(s => s.display()); + } + else { + p.background(this.bgColor); + this.ground.display(); + this.backgroundSnowflakes.forEach(s => s.display()); + } + } +} +class Snowflake { + constructor(x, y, r) { + this.rotation = 0; + this.pos = p.createVector(x, y); + this.radius = r; + this.hidden = false; + this.alpha = 0; + this.rotateDir = p.random([-1, 1]) * p.random(0.01, 0.03); + this.peakCount = p.random([4, 5, 6]); + } + update(wind_direction) { + let dir = p.createVector(p.map(this.radius, snowflake_min_r, snowflake_max_r, 0, 1) * wind_direction, p.map(this.radius, snowflake_min_r, snowflake_max_r, 0.5, 1) * 2); + this.pos.add(dir); + this.rotation += this.rotateDir; + if (this.pos.y > p.height + this.radius) { + this.pos.y = -this.radius; + } + if (this.pos.x > p.width + this.radius) { + this.pos.x = -this.radius; + } + else if (this.pos.x < -this.radius) { + this.pos.x = p.width + this.radius; + } + if (this.hidden && this.alpha > 0) { + this.alpha -= 0.015; + } + else if (this.alpha < 1) { + this.alpha += 0.015; + } + } + display() { + p.push(); + p.strokeWeight(1); + p.stroke(255, this.alpha * 255); + p.fill(255, this.alpha * 255); + p.translate(this.pos); + p.rotate(this.rotation % p.TWO_PI); + for (let rad = 0; rad < p.PI; rad += p.PI / this.peakCount) { + let x1 = p.cos(rad) * this.radius; + let y1 = p.sin(rad) * this.radius; + let x2 = p.cos(rad + p.PI) * this.radius; + let y2 = p.sin(rad + p.PI) * this.radius; + p.line(x1, y1, x2, y2); + } + p.pop(); + } +} +class Ground { + constructor() { + this.createPoints(); + } + createPoints() { + this.points = []; + for (let x = 0; x < p.width; x++) { + let vector = p.createVector(x, p.noise(x / 300) * 150); + this.points.push(vector); + } + } + update() { + } + display() { + p.push(); + p.fill(220, 220, 255); + p.stroke(50, 50, 150); + p.strokeWeight(2); + p.beginShape(); + for (let point of this.points) { + p.vertex(point.x, point.y + p.height / 2); + } + p.vertex(p.width, p.height); + p.vertex(0, p.height); + p.endShape(p.CLOSE); + p.pop(); + } +} +//# sourceMappingURL=background.js.map \ No newline at end of file diff --git a/public/data/scripts/js/background.js.map b/public/data/scripts/js/background.js.map new file mode 100644 index 0000000..1bf2736 --- /dev/null +++ b/public/data/scripts/js/background.js.map @@ -0,0 +1 @@ +{"version":3,"file":"background.js","sourceRoot":"","sources":["../ts/background.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/ball.js b/public/data/scripts/js/ball.js new file mode 100644 index 0000000..72b1acf --- /dev/null +++ b/public/data/scripts/js/ball.js @@ -0,0 +1,30 @@ +"use strict"; +class Ball extends Decoration { + constructor(properties) { + super(properties); + this.createGraphics(); + } + createGraphics() { + let img = images['ball']; + this.graphics = p.createGraphics(img.width, img.height); + this.updateColor(); + } + updateColor() { + let img = images['ball']; + this.graphics.clear(); + this.graphics.tint(this.colors[0]); + this.graphics.image(img, 0, 0); + } + display(pos, dim) { + super.display(pos, dim); + p.image(this.graphics, 0, 0, this.radius * 2, this.radius * 2); + if (this.mouseIsOver) { + this.brightness(70); + } + p.pop(); + } + update() { + super.update(); + } +} +//# sourceMappingURL=ball.js.map \ No newline at end of file diff --git a/public/data/scripts/js/ball.js.map b/public/data/scripts/js/ball.js.map new file mode 100644 index 0000000..6a68001 --- /dev/null +++ b/public/data/scripts/js/ball.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ball.js","sourceRoot":"","sources":["../ts/ball.ts"],"names":[],"mappings":";AAAA,MAAM,IAAK,SAAQ,UAAU;IAIzB,YAAY,UAAkB;QAC1B,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,cAAc;QACV,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,WAAW;QACP,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAGD,OAAO,CAAC,GAAe,EAAE,GAAe;QACpC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAExB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,WAAW,EAAC;YACjB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;SACvB;QAED,CAAC,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;IAED,MAAM;QACF,KAAK,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC;CAEJ"} \ No newline at end of file diff --git a/public/data/scripts/js/chain.js b/public/data/scripts/js/chain.js new file mode 100644 index 0000000..f506179 --- /dev/null +++ b/public/data/scripts/js/chain.js @@ -0,0 +1,146 @@ +"use strict"; +var has = Reflect.has; +class Chain extends Decoration { + constructor(properties) { + super(properties); + this.p1 = p.createVector(-0.65, 0); + this.p2 = p.createVector(0.65, 0); + this.p1IsBoundToMouse = false; + this.p2IsBoundToMouse = false; + this.placedOnce = false; + this.points = []; + this.lights = []; + this.generate(); + } + get properties() { + let obj = super.properties; + obj['p1'] = this.p1; + obj['p2'] = this.p2; + return obj; + } + generate() { + let d = p.dist(this.p1.x, this.p1.y, this.p2.x, this.p2.y); + let m = p.abs((this.p2.y - this.p1.y) / (this.p2.x - this.p1.x)); + let a = -1 / d - m / 10; + let b = (this.p1.y - this.p2.y + a * p.pow(this.p2.x, 2) - a * p.pow(this.p1.x, 2)) / + (this.p1.x - this.p2.x); + if (this.p1.x - this.p2.x === 0) + b = 0; + let c = this.p1.y - a * p.pow(this.p1.x, 2) - b * this.p1.x; + let func = x => a * x * x + b * x + c; + let detail = 40; + let points = []; + for (let i = 0; i <= detail; i++) { + let point = { x: 0, y: 0 }; + point.x = this.p1.x + (this.p2.x - this.p1.x) / detail * i; + point.y = func(point.x); + points.push(point); + } + let lightDist = 0.35; + let lastLight = { x: Infinity, y: Infinity }; + let lights = []; + detail = 300; + for (let i = 0; i <= detail; i++) { + let point = { x: 0, y: 0, hasLight: false }; + point.x = this.p1.x + (this.p2.x - this.p1.x) / detail * i; + point.y = func(point.x); + if (p.dist(point.x, point.y, lastLight.x, lastLight.y) >= lightDist) { + lights.push(point); + lastLight = point; + } + } + this.points = points; + this.lights = lights; + } + display(pos, dim) { + super.display(pos, dim); + p.strokeWeight(0.05); + p.stroke(0); + p.noFill(); + p.beginShape(); + for (let point of this.points) + p.vertex(point.x, point.y); + p.endShape(); + p.strokeWeight(0.01); + let i = 0; + for (let point of this.lights) { + let colorIndex = (i + p.int(p.frameCount / 30)) % this.colors.length; + p.fill(this.colors[colorIndex]); + p.ellipse(point.x, point.y, 0.2, 0.2); + i++; + } + p.pop(); + } + get hasValidPosition() { + return game.tree.containsPosition(this.realPosByAnchor(this.p1), true) + && game.tree.containsPosition(this.realPosByAnchor(this.p2), true); + } + realPosByAnchor(anchor) { + return p5.Vector.add(p5.Vector.mult(p5.Vector.add(this.pos, anchor), game.tree.sizeMultiplier), game.center); + } + realPointDistToAnchor(point, anchor) { + let pos = this.realPosByAnchor(anchor); + return p.dist(pos.x, pos.y, point.x, point.y); + } + isMouseOverAnchor(anchor) { + return this.realPointDistToAnchor(p.createVector(p.mouseX, p.mouseY), anchor) <= 0.5 * game.tree.sizeMultiplier; + } + get mouseIsOver() { + return this.isTaken && (this.isMouseOverAnchor(this.p1) || this.isMouseOverAnchor(this.p2)); + } + //Mouse is over this + mousePressed() { + super.mousePressed(); + if (this.isMouseOverAnchor(this.p1)) { + this.p1IsBoundToMouse = true; + } + else if (this.isMouseOverAnchor(this.p2)) { + this.p2IsBoundToMouse = true; + } + } + updateFromPoint(point, other, x, y) { + if (this.placedOnce) { + let pointRelative = p.createVector(x - this.pos.x, y - this.pos.y); + point.set(pointRelative); + let pointReal = p5.Vector.add(this.pos, point); + let otherReal = p5.Vector.add(this.pos, other); + let newPos = p5.Vector.div(p5.Vector.add(pointReal, otherReal), 2); + point.set(p5.Vector.sub(pointReal, newPos)); + other.set(p5.Vector.mult(point, -1)); + this.pos.set(newPos); + } + else { + this.pos.set(x - point.x, y - point.y); + } + } + update() { + let x = (p.mouseX - game.center.x) / game.tree.sizeMultiplier, y = (p.mouseY - game.center.y) / game.tree.sizeMultiplier; + if (this.isBoundToMouse) { + if (this.p1IsBoundToMouse) { + this.updateFromPoint(this.p1, this.p2, x, y); + } + if (this.p2IsBoundToMouse) { + this.updateFromPoint(this.p2, this.p1, x, y); + } + this.generate(); + } + else { + super.update(); + } + if (this.isTaken && !this.isBoundToMouse) { + this.placedOnce = true; + } + } + toJSON(index) { + let list = [ + "p1", + "p2" + ]; + let obj = super.toJSON(index); + for (let item of list) { + obj[item] = this[item]; + } + return obj; + } +} +//# sourceMappingURL=chain.js.map \ No newline at end of file diff --git a/public/data/scripts/js/chain.js.map b/public/data/scripts/js/chain.js.map new file mode 100644 index 0000000..dde189f --- /dev/null +++ b/public/data/scripts/js/chain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chain.js","sourceRoot":"","sources":["../ts/chain.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/container.js b/public/data/scripts/js/container.js new file mode 100644 index 0000000..d2adc8b --- /dev/null +++ b/public/data/scripts/js/container.js @@ -0,0 +1,67 @@ +"use strict"; +class Container { + constructor(index, content) { + this.pos = p.createVector(); + this.dim = p.createVector(); + this.index = index; + this.content = content; + } + get mouseIsOver() { + return p.mouseX > this.pos.x && p.mouseX < this.pos.x + this.dim.x && + p.mouseY > this.pos.y && p.mouseY < this.pos.y + this.dim.y; + } + get center() { + return p5.Vector.add(this.pos, p5.Vector.div(this.dim, 2)); + } + display() { + let w = this.dim.x, h = this.dim.y; + let x = this.pos.x + w / 2, y = this.pos.y + h / 2; + p.image(images['box'], x, y, w, h); + if (this.content !== game.tree) { + this.content.display(); + } + if (this.mouseIsOver) { + p.fill(0, 50); + p.noStroke(); + p.rect(x - w / 2, y - h / 2, w, h); + } + } + update() { + let currentCount = game.currentContainers.length; + let w = p.width / currentCount, h = w; + let x = w * this.index, y = p.height - h; + if (this.content instanceof Decoration) { + let otherCount = game.containers.filter(c => game.currentContainers.find(ic => ic == c) == null).length; + w = h = p.width / otherCount; + x = w * this.index; + y = p.height - h; + x += p.width / 2 - w * currentCount / 2; + } + this.pos.set(x, y); + this.dim.set(w, h); + if (this.content !== game.tree) + this.content.update(); + } + mousePressed() { + if (this.content instanceof Tree) { + game.tree.animationDirection = -1; + if (this.content === game.tree) { + game.tree = new Tree(null); + } + else { + game.tree = this.content; + game.tree.animationDirection = 1; + } + } + if (this.content instanceof Decoration && !game.tree.isPlaceholder) { + let decoration = Decoration.Create(this.content.properties); + decoration.isTaken = true; + decoration.isBoundToMouse = true; + game.tree.decorations.push(decoration); + if (decoration instanceof Chain) { + decoration.p1IsBoundToMouse = true; + } + } + } +} +//# sourceMappingURL=container.js.map \ No newline at end of file diff --git a/public/data/scripts/js/container.js.map b/public/data/scripts/js/container.js.map new file mode 100644 index 0000000..24228c1 --- /dev/null +++ b/public/data/scripts/js/container.js.map @@ -0,0 +1 @@ +{"version":3,"file":"container.js","sourceRoot":"","sources":["../ts/container.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/decoration.js b/public/data/scripts/js/decoration.js new file mode 100644 index 0000000..f3c0e4e --- /dev/null +++ b/public/data/scripts/js/decoration.js @@ -0,0 +1,167 @@ +"use strict"; +class Decoration { + constructor(properties) { + this.pos = p.createVector(); + this.isTaken = false; + this.isBoundToMouse = false; + this.isToDelete = false; + this.needsValidation = false; + this.isSelected = false; + for (let key in properties) { + if (properties.hasOwnProperty(key)) { + if (Array.isArray(properties[key])) { + this[key] = arrayCopy(properties[key]); + } + else { + this[key] = properties[key]; + } + } + } + } + get properties() { + let colors = []; + for (let i = 0; i < this.colors.length; i++) { + let color = []; + for (let c of this.colors[i]) { + color.push(c); + } + colors.push(color); + } + return { + radius: this.radius, + colors: colors, + type: this.type + }; + } + get mouseIsOver() { + if (this.isTaken) { + let pos = this.realPos; + return p.dist(pos.x, pos.y, p.mouseX, p.mouseY) <= this.radius * game.tree.sizeMultiplier; + } + return false; + } + get hasValidPosition() { + return game.tree.containsPosition(this.realPos, true); + } + get realPos() { + return p5.Vector.add(p5.Vector.mult(this.pos, game.tree.sizeMultiplier), game.center); + } + static Create(properties) { + switch (properties['type']) { + case 'ball': + return new Ball(properties); + case 'star': + return new Star(properties); + case 'chain': + return new Chain(properties); + } + } + display(pos, dim) { + let sizeMultiplier = this.sizeMultiplier; + if (pos || dim) { + sizeMultiplier = dim.y * 0.6; + } + else { + pos = this.pos; + } + p.push(); + p.translate(pos); + p.scale(sizeMultiplier); + } + brightness(value) { + p.noStroke(); + p.fill(0, 0, 0, value); + p.ellipse(0, 0, this.radius * 2, this.radius * 2); + } + update() { + if (!this.isTaken) { + this.pos = this.container.center; + this.sizeMultiplier = this.container.dim.y * 0.6; + } + else { + this.sizeMultiplier = 1; + } + if (this.isBoundToMouse) { + let x = (p.mouseX - game.center.x) / game.tree.sizeMultiplier, y = (p.mouseY - game.center.y) / game.tree.sizeMultiplier; + this.pos.set(x, y); + } + } + //Assumes mouse is over this + mousePressed() { + this.isBoundToMouse = true; + } + //Always called + mouseReleased() { + } + toJSON(index) { + let list = [ + "pos", + "colors", + "radius", + "type" + ]; + let obj = {}; + for (let item of list) { + obj[item] = this[item]; + } + return obj; + } + static restoreFrom(rawDeco) { + let props = {}; + for (let key in rawDeco) { + if (['pos', 'p1', 'p2'].find(s => s === key) === undefined) { + props[key] = rawDeco[key]; + } + } + let deco = Decoration.Create(props); + deco.isTaken = true; + deco.pos.x = rawDeco['pos'].x; + deco.pos.y = rawDeco['pos'].y; + if (deco instanceof Chain) { + deco.p1.set(rawDeco['p1'].x, rawDeco['p1'].y); + deco.p2.set(rawDeco['p2'].x, rawDeco['p2'].y); + deco.generate(); + } + return deco; + } +} +function darker(c) { + let newC = []; + for (let v of c) { + newC.push(p.constrain(v * 0.6, 0, 255)); + } + return newC; +} +function arrayCopy(a) { + let newArr = []; + for (let c of a) { + let copy = c; + if (Array.isArray(c)) { + copy = arrayCopy(c); + } + newArr.push(copy); + } + return newArr; +} +function equals(a1, a2) { + // if the other array is a falsy value, return + if (!a1) + return false; + // compare lengths - can save a lot of time + if (a2.length != a1.length) + return false; + for (let i = 0, l = a2.length; i < l; i++) { + // Check if we have nested arrays + if (a2[i] instanceof Array && a1[i] instanceof Array) { + // recurse into the nested arrays + if (!a2[i].equals(a1[i])) + return false; + } + else if (a2[i] != a1[i]) { + // Warning - two different object instances will never be equal: {x:20} != {x:20} + return false; + } + } + return true; +} +//# sourceMappingURL=decoration.js.map \ No newline at end of file diff --git a/public/data/scripts/js/decoration.js.map b/public/data/scripts/js/decoration.js.map new file mode 100644 index 0000000..ea47931 --- /dev/null +++ b/public/data/scripts/js/decoration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decoration.js","sourceRoot":"","sources":["../ts/decoration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/events.js b/public/data/scripts/js/events.js new file mode 100644 index 0000000..cc8cab3 --- /dev/null +++ b/public/data/scripts/js/events.js @@ -0,0 +1,27 @@ +'use strict'; +p.keyPressed = () => { + switch (p.keyCode) { + //Ctrl + D + case 68: + if (p.keyIsDown(17)) { + debug = !debug; + let msg = 'Debug mode turned ' + (debug ? 'ON' : 'OFF'); + console.info(msg); + return false; + } + break; + } +}; +p.mousePressed = () => { + game.mousePressed(); + released = false; +}; +p.mouseReleased = () => { + game.mouseReleased(); + released = true; +}; +p.windowResized = () => { + let w = $('#canvas_holder').width(), h = $('#canvas_holder').height(); + p.resizeCanvas(w, h); +}; +//# sourceMappingURL=events.js.map \ No newline at end of file diff --git a/public/data/scripts/js/events.js.map b/public/data/scripts/js/events.js.map new file mode 100644 index 0000000..9c95bde --- /dev/null +++ b/public/data/scripts/js/events.js.map @@ -0,0 +1 @@ +{"version":3,"file":"events.js","sourceRoot":"","sources":["../ts/events.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE;IAChB,QAAQ,CAAC,CAAC,OAAO,EAAC;QACd,UAAU;QACV,KAAK,EAAE;YACH,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAC;gBAChB,KAAK,GAAG,CAAC,KAAK,CAAC;gBACf,IAAI,GAAG,GAAG,oBAAoB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC;aAChB;YACD,MAAM;KACb;AACL,CAAC,CAAA;AAED,CAAC,CAAC,YAAY,GAAG,GAAG,EAAE;IAClB,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;AACrB,CAAC,CAAA;AACD,CAAC,CAAC,aAAa,GAAG,GAAG,EAAE;IACnB,IAAI,CAAC,aAAa,EAAE,CAAC;IACrB,QAAQ,GAAG,IAAI,CAAC;AACpB,CAAC,CAAA;AAED,CAAC,CAAC,aAAa,GAAG,GAAG,EAAE;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,EACnC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,CAAA"} \ No newline at end of file diff --git a/public/data/scripts/js/game.js b/public/data/scripts/js/game.js new file mode 100644 index 0000000..5ea4ee7 --- /dev/null +++ b/public/data/scripts/js/game.js @@ -0,0 +1,219 @@ +"use strict"; +class Game { + constructor() { + this.trees = []; + this.tree = new Tree(null); + this.decorations = []; + this.containers = []; + this.isTreeMode = true; + this.isDecorationMode = false; + this.switchButton = new Button('switch'); + this.downloadButton = new Button('download'); + this.restoreButton = new Button('restore'); + this.background = new Background(); + settings.game.trees.forEach((s) => this.trees.push(new Tree(s))); + let red = settings.game.colors.red; + this.decorations = [ + Decoration.Create({ + type: "ball", radius: 0.45, colors: [red] + }), + Decoration.Create({ + type: "star", radius: 0.45, colors: [red, darker(red)] + }), + Decoration.Create({ + type: "chain", radius: 0.45, colors: [ + settings.game.colors.gold, + settings.game.colors.silver + ] + }), + ]; + $('#gold, #silver').attr('checked', 'checked'); + this.trees.forEach((t, i) => { + let c = new Container(i, t); + this.containers.push(c); + t.container = c; + }); + this.decorations.forEach((d, i) => { + let c = new Container(i, d); + this.containers.push(c); + d.container = c; + }); + this.updateDecorationSettings(); + this.updateStarSettings(); + } + updateDecorationSettings() { + this.decorations.filter(d => d instanceof Ball || d instanceof Star).forEach(d => { + d.radius = $('#radius').val() / 100 * 0.7; + let colors = []; + colors.push(JSON.parse($('#color').val())); + if (d instanceof Ball) { + d.colors = colors; + d.updateColor(); + } + if (d instanceof Star) { + d.innerRadius = $('#inner_radius').val() * d.radius; + colors.push(darker(colors[0])); + d.colors = colors; + d.createTriangles(); + } + }); + } + updateStarSettings() { + this.decorations.filter(d => d instanceof Star).forEach((s) => { + s.innerRadius = $('#inner_radius').val() * s.radius; + s.raysCount = parseInt($('#rays_count').val()); + s.createTriangles(); + }); + } + updateChainSettings(element) { + let chain = this.decorations.find(d => d instanceof Chain); + let colorName = element.attr('id'); + let colorValue = settings.game.colors[colorName]; + let cvIndex = chain.colors.findIndex(c => equals(c, colorValue)); + if (cvIndex >= 0) { + chain.colors.splice(cvIndex, 1); + } + else { + chain.colors.push(colorValue); + } + if (chain.colors.length == 0) { + chain.colors.push(colorValue); + return false; + } + return true; + } + updateBackgroundSettings() { + this.background.updateSettings(); + } + get center() { + return p.createVector(p.width / 2, this.height / 2); + } + get height() { + return p.height - this.containers[0].dim.y; + } + get currentContainers() { + return this.containers.filter(c => { + if (this.isTreeMode) + return c.content instanceof Tree; + if (this.isDecorationMode) + return c.content instanceof Decoration; + }); + } + update() { + this.background.update(); + this.switchButton.update(); + this.downloadButton.update(); + this.restoreButton.update(); + this.currentContainers.forEach(c => c.update()); + this.tree.update(); + } + display() { + this.background.display(); + this.switchButton.display(); + this.downloadButton.display(); + this.restoreButton.display(); + this.currentContainers.forEach(c => c.display()); + this.tree.display(); + this.background.display(true); + } + //Always called + mousePressed() { + this.tree.mousePressed(); + this.currentContainers.forEach(c => c.mouseIsOver ? c.mousePressed() : null); + this.switchButton.mouseIsOver ? this.switchButton.mousePressed() : null; + this.downloadButton.mouseIsOver ? this.downloadButton.mousePressed() : null; + this.restoreButton.mouseIsOver ? this.restoreButton.mousePressed() : null; + } + //Always called + mouseReleased() { + this.tree.mouseReleased(); + } + restoreTrees(rawTrees) { + this.trees.forEach((t, i) => { + t.restoreFrom(rawTrees[i]); + }); + } +} +class Button { + constructor(type) { + this.pos = p.createVector(); + this.dim = p.createVector(); + this.type = type; + } + get mouseIsOver() { + return p.mouseX > this.pos.x && p.mouseX < this.pos.x + this.dim.x && + p.mouseY > this.pos.y && p.mouseY < this.pos.y + this.dim.y; + } + get center() { + return p5.Vector.add(this.pos, p5.Vector.div(this.dim, 2)); + } + display() { + let w = this.dim.x, h = this.dim.y; + let x = this.pos.x + w / 2, y = this.pos.y + h / 2; + p.image(images['box'], x, y, w, h); + if (this.type === 'switch') { + if (game.isTreeMode) { + game.decorations[0].display(this.center, this.dim); + } + if (game.isDecorationMode) { + let tree = game.tree; + if (tree.isPlaceholder) + tree = game.trees[0]; + tree.display(this.center, this.dim); + } + } + if (this.type === 'download') { + p.textAlign(p.CENTER, p.CENTER); + p.textSize(25); + p.fill(0); + p.text("Save", this.pos.x, this.pos.y, this.dim.x, this.dim.y); + } + if (this.type === 'restore') { + p.textAlign(p.CENTER, p.CENTER); + p.textSize(20); + p.fill(0); + p.text("Restore", this.pos.x, this.pos.y, this.dim.x, this.dim.y); + } + if (this.mouseIsOver) { + p.fill(0, 50); + p.noStroke(); + p.rect(x - w / 2, y - h / 2, w, h); + } + } + update() { + let w, h, x, y; + if (this.type === 'switch') { + w = game.containers[0].dim.x / 2; + h = w; + x = 0; + y = game.containers[0].pos.y - h; + } + if (this.type === 'download') { + w = game.containers[0].dim.x / 2; + h = w; + x = p.width - w; + y = game.containers[0].pos.y - h; + } + if (this.type === 'restore') { + w = game.containers[0].dim.x / 2; + h = w; + x = p.width - 2 * w; + y = game.containers[0].pos.y - h; + } + this.pos.set(x, y); + this.dim.set(w, h); + } + mousePressed() { + if (this.type === 'switch') { + game.isDecorationMode = !game.isDecorationMode; + game.isTreeMode = !game.isTreeMode; + } + if (this.type === 'download') { + downloadTrees(); + } + if (this.type === 'restore') { + $('#file_browser')[0].click(); + } + } +} +//# sourceMappingURL=game.js.map \ No newline at end of file diff --git a/public/data/scripts/js/game.js.map b/public/data/scripts/js/game.js.map new file mode 100644 index 0000000..b62ef4d --- /dev/null +++ b/public/data/scripts/js/game.js.map @@ -0,0 +1 @@ +{"version":3,"file":"game.js","sourceRoot":"","sources":["../ts/game.ts"],"names":[],"mappings":";AAAA,MAAM,IAAI;IAoBT;QAlBA,UAAK,GAAW,EAAE,CAAA;QAClB,SAAI,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;QAE3B,gBAAW,GAAiB,EAAE,CAAA;QAE9B,eAAU,GAAgB,EAAE,CAAA;QAE5B,eAAU,GAAY,IAAI,CAAA;QAC1B,qBAAgB,GAAY,KAAK,CAAA;QAIjC,iBAAY,GAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3C,mBAAc,GAAW,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAC/C,kBAAa,GAAW,IAAI,MAAM,CAAC,SAAS,CAAC,CAAA;QAE7C,eAAU,GAAe,IAAI,UAAU,EAAE,CAAA;QAGxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG;YAClB,UAAU,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC;aACzC,CAAC;YACF,UAAU,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;aACtD,CAAC;YACF,UAAU,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;oBACpC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;oBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;iBAC3B;aACD,CAAC;SACF,CAAC;QACF,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAED,wBAAwB;QACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChF,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAY,GAAG,GAAG,GAAG,GAAG,CAAC;YACpD,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAY,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,IAAI,EAAC;gBACrB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClB,CAAC,CAAC,WAAW,EAAE,CAAC;aAChB;YACD,IAAI,CAAC,YAAY,IAAI,EAAC;gBACrB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,EAAY,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClB,CAAC,CAAC,eAAe,EAAE,CAAC;aACpB;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB;QACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAO,EAAE,EAAE;YACnE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,EAAY,GAAG,CAAC,CAAC,MAAM,CAAC;YAC9D,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,EAAY,CAAC,CAAC;YACzD,CAAC,CAAC,eAAe,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAe;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,CAAC,EAAC;YAChB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAChC;aAAM;YACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9B;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAC;YAC5B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;SACb;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAGD,wBAAwB;QACvB,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,MAAM;QACT,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,MAAM;QACT,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,iBAAiB;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,UAAU;gBAClB,OAAO,CAAC,CAAC,OAAO,YAAY,IAAI,CAAA;YACjC,IAAI,IAAI,CAAC,gBAAgB;gBACxB,OAAO,CAAC,CAAC,OAAO,YAAY,UAAU,CAAA;QACxC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM;QACL,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACN,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,eAAe;IACf,YAAY;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,CAAC;IAED,eAAe;IACf,aAAa;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY,CAAC,QAAkB;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;CAED;AAED,MAAM,MAAM;IASX,YAAY,IAAY;QAPxB,QAAG,GAAc,CAAC,CAAC,YAAY,EAAE,CAAA;QACjC,QAAG,GAAc,CAAC,CAAC,YAAY,EAAE,CAAA;QAOhC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,WAAW;QACd,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACjE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,MAAM;QACT,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO;QACN,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EACjB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EACzB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAC;YAC1B,IAAI,IAAI,CAAC,UAAU,EAAC;gBACnB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aACnD;YACD,IAAI,IAAI,CAAC,gBAAgB,EAAC;gBACzB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,IAAI,CAAC,aAAa;oBACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC;SACD;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAC;YAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/D;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAC;YAC3B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAClE;QAED,IAAI,IAAI,CAAC,WAAW,EAAC;YACpB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAG,CAAC,CAAC,CAAC;SACpC;IAEF,CAAC;IAED,MAAM;QACL,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAC;YAC1B,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAC;YAC5B,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAC;YAC3B,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,YAAY;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAC;YAC5B,aAAa,EAAE,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAC;YAC3B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;SAC9B;IACF,CAAC;CAED"} \ No newline at end of file diff --git a/public/data/scripts/js/init.js b/public/data/scripts/js/init.js new file mode 100644 index 0000000..0a6dd4c --- /dev/null +++ b/public/data/scripts/js/init.js @@ -0,0 +1,143 @@ +'use strict'; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +let debug = false, font, settings, loader; +//Only for online games +let socket; +let antiCacheQuery = '?_=' + new Date().getTime(); +let game; +let released = false; +let images = {}; +const p = new p5((p) => { + p.preload = () => { + settings = p.loadJSON('data/settings/settings.json' + antiCacheQuery, {}, 'json', (json) => { + console.log('Local settings loaded: ', json); + }, (error) => { + console.log('Local settings failed: ', error); + }); + font = p.loadFont('data/styles/fonts/Tajawal/Tajawal-Regular.ttf' + antiCacheQuery, (font) => { + console.log('Local font loaded: ', font); + }, (error) => { + console.log('Local font failed: ', error); + }); + images['ball'] = p.loadImage('data/images/ball.png' + antiCacheQuery, img => { + console.log('Ball image loaded: ', img); + }, error => { + console.log('Ball image failed: ', error); + }); + images['box'] = p.loadImage('data/images/box.png' + antiCacheQuery, img => { + console.log('Box image loaded: ', img); + }, error => { + console.log('Box image failed: ', error); + }); + }, + p.setup = () => { + interfaceSetup(); + canvasSetup(); + //loader = new Loader(p.createVector(p.width / 2, p.height / 2), Math.min(p.width, p.height) / 2); + loadDynamicScripts().then(() => { + //Load other stuff, then => + //loader = null; + game = new Game(); + game.trees[0].container.mousePressed(); + }); + }, + p.draw = () => { + p.clear(); + if (game) { + game.update(); + game.display(); + } + if (loader) { + loader.update(); + loader.display(); + } + if (debug) + debugInformation(); + }; +}); +function debugInformation() { +} +function interfaceSetup() { + let files_elem = $('#file_browser'); + files_elem.on('change', () => { + let file = files_elem.get(0).files[0]; + file.text().then(text => { + game.restoreTrees(JSON.parse(text)[0]); + }); + }); + let colorSelect = $('#color'); + let possibleColors = $('#possible_colors'); + for (let colorName in settings.game.colors) { + if (!settings.game.colors.hasOwnProperty(colorName)) + continue; + let publicName = colorName.substr(0, 1).toUpperCase() + colorName.substr(1); + let option = $(''); + option.html(publicName); + option.val("[" + settings.game.colors[colorName] + "]"); + colorSelect.append(option); + let checkbox = $(''); + checkbox.attr({ + type: 'checkbox', + id: colorName + }); + checkbox.on('click', event => { + if (game) { + if (!game.updateChainSettings($(event.target))) { + console.info('failed'); + event.preventDefault(); + } + } + }); + let label = $(''); + label.html(publicName); + label.attr('for', colorName); + possibleColors.append(checkbox, label); + } +} +function downloadTrees() { + let str = JSON.stringify(game.trees, (key, value) => { + if (value instanceof p5.Vector) { + return { + x: value.x, + y: value.y + }; + } + return value; + }); + let data = 'data:application/json;charset=utf-8,[' + encodeURIComponent(str) + "]"; + $("#save_link").attr("href", data); + $("#save_link")[0].click(); +} +function canvasSetup() { + p.frameRate(60); + let w = $('#canvas_holder').width(), h = $('#canvas_holder').height(); + let canvas = p.createCanvas(w, h); + canvas.parent('canvas_holder'); + p.textFont(font); + p.imageMode(p.CENTER); +} +function loadDynamicScripts() { + return __awaiter(this, void 0, void 0, function* () { + const json = yield p.httpGet('data/settings/libraries.json' + antiCacheQuery, 'json'); + let requests = []; + for (let script in json) { + if (json[script]) { + let url = '/lib/benjocraeft/' + script + '.js'; + requests.push($.getScript(url, () => { + console.log('Successfully loaded script: ', url); + })); + } + } + yield $.when(...requests); + console.log('All dynamic scripts have been loaded!'); + }); +} +//# sourceMappingURL=init.js.map \ No newline at end of file diff --git a/public/data/scripts/js/init.js.map b/public/data/scripts/js/init.js.map new file mode 100644 index 0000000..779ce87 --- /dev/null +++ b/public/data/scripts/js/init.js.map @@ -0,0 +1 @@ +{"version":3,"file":"init.js","sourceRoot":"","sources":["../ts/init.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/loader.js b/public/data/scripts/js/loader.js new file mode 100644 index 0000000..516575f --- /dev/null +++ b/public/data/scripts/js/loader.js @@ -0,0 +1,40 @@ +"use strict"; +class Loader { + constructor(pos, radius) { + this.pos = pos; + this.c = p.createGraphics(radius * 2, radius * 2); + this.radius = radius; + this.center = p.createVector(radius, radius); + this.message = 'Loading...'; + this.progress = 0; + this.angle = 0; + } + update() { + this.angle += Math.PI / 10; + } + display() { + let c = this.c; + c.clear(); + c.noFill(); + c.stroke(20, 100, 200); + c.strokeWeight(this.radius * 0.025); + //c.arc(this.center.x, this.center.y, this.radius * 2, this.radius * 2, this.angle, this.angle + Math.PI * 1.5); + c.strokeWeight(2); + c.rect(this.center.x - this.radius + 5, this.center.y - 25, this.radius * 2 - 50, 50); + c.fill(50, 150, 255); + c.rect(this.center.x - this.radius + 5, this.center.y - 25, (this.radius - 50) * this.progress, 50); + c.textAlign(p.CENTER, p.CENTER); + c.textSize(25); + c.fill(220); + c.strokeWeight(4); + c.text(this.message, this.radius, this.radius * 1.5); + c.textSize(40); + c.text(Math.floor(this.progress * 100) + '%', this.radius, this.radius / 2); + p.imageMode(p.CENTER); + p.image(c, this.pos.x, this.pos.y); + } + destroy() { + this.c.remove(); + } +} +//# sourceMappingURL=loader.js.map \ No newline at end of file diff --git a/public/data/scripts/js/loader.js.map b/public/data/scripts/js/loader.js.map new file mode 100644 index 0000000..6b0bdea --- /dev/null +++ b/public/data/scripts/js/loader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"loader.js","sourceRoot":"","sources":["../ts/loader.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM;IAUR,YAAY,GAAc,EAAE,MAAc;QACtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACpC,gHAAgH;QAChH,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEpG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAErD,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5E,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;CAEJ"} \ No newline at end of file diff --git a/public/data/scripts/js/online.js b/public/data/scripts/js/online.js new file mode 100644 index 0000000..28d0091 --- /dev/null +++ b/public/data/scripts/js/online.js @@ -0,0 +1,9 @@ +'use strict'; +function socketConnect(project, name = "noone") { + let urlQueries = '?game=' + project.name + '&name=' + name; + let port = 3000; + let url = location.hostname + ":" + port + urlQueries; + socket = io.connect(url); + socket.on('connect', () => console.log('Connected to ', url)); +} +//# sourceMappingURL=online.js.map \ No newline at end of file diff --git a/public/data/scripts/js/online.js.map b/public/data/scripts/js/online.js.map new file mode 100644 index 0000000..dd0e517 --- /dev/null +++ b/public/data/scripts/js/online.js.map @@ -0,0 +1 @@ +{"version":3,"file":"online.js","sourceRoot":"","sources":["../ts/online.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,SAAS,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO;IAC1C,IAAI,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC3D,IAAI,IAAI,GAAG,IAAI,CAAA;IACf,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC;IAEtD,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC"} \ No newline at end of file diff --git a/public/data/scripts/js/star.js b/public/data/scripts/js/star.js new file mode 100644 index 0000000..c3fbe85 --- /dev/null +++ b/public/data/scripts/js/star.js @@ -0,0 +1,72 @@ +"use strict"; +class Star extends Decoration { + constructor(properties) { + super(properties); + this.createTriangles(); + } + get properties() { + let obj = super.properties; + obj['raysCount'] = this.raysCount; + obj['innerRadius'] = this.innerRadius; + return obj; + } + createTriangles() { + this.triangles = []; + let increment = p.TWO_PI / this.raysCount / 2, firstOuter = true; + for (let i = 0; i < p.TWO_PI; i += increment) { + let x1 = p.sin(i), y1 = -p.cos(i), x2 = p.sin(i + increment), y2 = -p.cos(i + increment); + if (firstOuter) { + x1 *= this.radius, + y1 *= this.radius, + x2 *= this.innerRadius, + y2 *= this.innerRadius; + } + else { + x2 *= this.radius, + y2 *= this.radius, + x1 *= this.innerRadius, + y1 *= this.innerRadius; + } + firstOuter = !firstOuter; + this.triangles.push([ + p.createVector(x1, y1), + p.createVector(x2, y2), + p.createVector(0, 0) + ]); + } + } + brightness(value) { + this.triangles.forEach((t, i) => { + p.fill(0, 0, 0, value); + p.triangle(t[0].x, t[0].y, t[1].x, t[1].y, t[2].x, t[2].y); + }); + } + display(pos, dim) { + super.display(pos, dim); + p.noStroke(); + this.triangles.forEach((t, i) => { + let color = this.colors[i % this.colors.length]; + p.fill(color); + p.triangle(t[0].x, t[0].y, t[1].x, t[1].y, t[2].x, t[2].y); + }); + if (this.mouseIsOver) { + this.brightness(70); + } + p.pop(); + } + update() { + super.update(); + } + toJSON(index) { + let list = [ + "raysCount", + "innerRadius" + ]; + let obj = super.toJSON(index); + for (let item of list) { + obj[item] = this[item]; + } + return obj; + } +} +//# sourceMappingURL=star.js.map \ No newline at end of file diff --git a/public/data/scripts/js/star.js.map b/public/data/scripts/js/star.js.map new file mode 100644 index 0000000..9435e65 --- /dev/null +++ b/public/data/scripts/js/star.js.map @@ -0,0 +1 @@ +{"version":3,"file":"star.js","sourceRoot":"","sources":["../ts/star.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/js/tree.js b/public/data/scripts/js/tree.js new file mode 100644 index 0000000..f2300fb --- /dev/null +++ b/public/data/scripts/js/tree.js @@ -0,0 +1,223 @@ +"use strict"; +class Tree { + constructor(properties) { + this.pos = p.createVector(); + this.sizeMultiplier = 1; + this.animationProgress = 0; + this.animationDirection = -1; + this.decorations = []; + if (properties == null) { + this.isPlaceholder = true; + } + else { + for (let key in properties) { + this[key] = properties[key]; + } + } + } + //Always called + mousePressed() { + for (let d of [...this.decorations].reverse()) { + if (d.mouseIsOver) { + d.mousePressed(); + let index = this.decorations.findIndex(deco => deco == d); + this.decorations[index] = this.decorations[this.decorations.length - 1]; + this.decorations[this.decorations.length - 1] = d; + break; + } + } + } + //Always called + mouseReleased() { + for (let d of this.decorations) { + d.mouseReleased(); + } + } + get smoothProgress() { + return this.smoothStep(0, 1, this.animationProgress); + } + containsPosition(pos, excludeStem) { + let size = game.height, x = (p.width - size) / 2; + let px = pos.x, py = pos.y; + let pixelColor = p.get(px, py).slice(0, 3); + let colorIsValid = game.tree.getAllColors(excludeStem).find(c => equals(c, pixelColor)) != null; + return colorIsValid && + px > x && px < x + size && + py > 0 && py < size - 20; + } + update() { + this.animationProgress += 0.05 * this.animationDirection; + this.animationProgress = this.animationProgress > 1 ? 1 : this.animationProgress < 0 ? 0 : this.animationProgress; + if (this.isPlaceholder) { + this.pos = game.center; + this.sizeMultiplier = game.height * 0.05; + } + else { + this.pos = p5.Vector.lerp(this.container.center, game.center, this.smoothProgress); + this.sizeMultiplier = p.lerp(this.container.dim.y * 0.05, game.height * 0.05, this.smoothProgress); + } + this.decorations.forEach((d, i) => { + if (d.isToDelete) { + this.decorations.splice(i, 1); + if (d instanceof Ball) { + d.graphics.remove(); + } + } + }); + this.decorations.forEach(d => d.update()); + } + display(pos, dim) { + let sizeMultiplier = this.sizeMultiplier; + if (pos || dim) { + sizeMultiplier = dim.y * 0.05; + } + else { + pos = this.pos; + } + p.push(); + p.translate(pos.x, pos.y); + p.scale(sizeMultiplier); + if (this.isPlaceholder) { + p.fill(0); + p.stroke(100, 220, 100); + p.strokeWeight(0.05); + p.textSize(1); + p.textAlign(p.CENTER, p.CENTER); + p.text('Select your Christmas Tree!', 0, 0); + } + else { + this.drawTree(); + this.drawDecorations(); + if (debug && this === game.tree) { + p.stroke(255, 0, 0, 80); + p.strokeWeight(0.05); + for (let i = -10; i <= 10; i++) { + p.line(-10, i, 10, i); + p.line(i, -10, i, 10); + } + } + } + p.pop(); + } + drawTree() { + p.push(); + p.translate(0, 1); + p.fill(this.stemColor); + p.stroke(0); + p.strokeWeight(0.05); + p.rect(-this.stemRadius, 0, this.stemRadius * 2, this.stemHeight); + let drawLeaf = (r, h) => { + if (this.isSmooth) { + let cps = [ + p.createVector(40, 70), + p.createVector(60, 90), + p.createVector(100, 130), + p.createVector(-100, 130), + p.createVector(-60, 90), + p.createVector(-40, 70) + ]; + cps.forEach(c => { + c.x *= r / 100; + c.y *= h / 100; + }); + p.beginShape(); + p.vertex(0, 0); + p.bezierVertex(cps[0].x, cps[0].y, cps[1].x, cps[1].y, r, h); + p.bezierVertex(cps[2].x, cps[2].y, cps[3].x, cps[3].y, -r, h); + p.bezierVertex(cps[4].x, cps[4].y, cps[5].x, cps[5].y, 0, 0); + p.endShape(); + if (debug) { + p.stroke(255, 0, 0); + cps.forEach(c => p.ellipse(c.x, c.y, 0)); + } + } + else { + p.triangle(0, 0, r, h, -r, h); + } + }; + for (let i = 0; i < this.leafCount; i++) { + let y = -i * this.leafHeight / 2; + let lr = this.leafRadius * (this.leafCount - i) / this.leafCount; + p.push(); + p.translate(0, y); + p.fill(this.leafColors[i % this.leafColors.length]); + drawLeaf(lr, this.leafHeight); + p.pop(); + } + p.pop(); + } + drawDecorations() { + for (let d of this.decorations) { + if (d.needsValidation) { + if (!d.hasValidPosition) { + d.isToDelete = true; + } + d.needsValidation = false; + } + } + for (let d of this.decorations) { + if (released && d.isBoundToMouse) { + d.needsValidation = true; + d.isBoundToMouse = false; + if (d instanceof Chain) { + d.p1IsBoundToMouse = false; + d.p2IsBoundToMouse = false; + } + } + d.display(); + } + } + getAllColors(withoutStem) { + let colors = []; + colors.push(...this.leafColors, [0, 0, 0]); + if (!withoutStem) { + colors.push(this.stemColor); + } + return colors; + } + smoothStep(start, end, t) { + function clamp(x, lowLimit, upLimit) { + if (x < lowLimit) + x = lowLimit; + if (x > upLimit) + x = upLimit; + return x; + } + t = clamp((t - start) / (end - start), 0, 1); + return t * t * t * (t * (t * 6 - 15) + 10); + } + toJSON(index) { + let list = [ + "stemRadius", + "leafCount", + "leafColors", + "stemColor", + "stemHeight", + "leafHeight", + "leafRadius", + "isSmooth", + "isPlaceholder", + "decorations" + ]; + let obj = {}; + for (let item of list) { + obj[item] = this[item]; + } + return obj; + } + restoreFrom(rawTree) { + for (let key in rawTree) { + if (key === 'decorations') { + this[key] = []; + rawTree[key].forEach(rawDeco => { + let deco = Decoration.restoreFrom(rawDeco); + this[key].push(deco); + }); + } + else { + this[key] = rawTree[key]; + } + } + } +} +//# sourceMappingURL=tree.js.map \ No newline at end of file diff --git a/public/data/scripts/js/tree.js.map b/public/data/scripts/js/tree.js.map new file mode 100644 index 0000000..2f8ff90 --- /dev/null +++ b/public/data/scripts/js/tree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree.js","sourceRoot":"","sources":["../ts/tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/data/scripts/ts/background.ts b/public/data/scripts/ts/background.ts new file mode 100644 index 0000000..6e79530 --- /dev/null +++ b/public/data/scripts/ts/background.ts @@ -0,0 +1,189 @@ +let snowflake_max_r = 12; +let snowflake_min_r = 7; +let snowflake_max_count = 500; + +class Background{ + + bgColor: p5.Color = p.color(100, 100, 255); + + snowflakes: Snowflake[] + foregroundSnowflakes: Snowflake[] + backgroundSnowflakes: Snowflake[] + wind_direction: number = 0 + + ground: Ground = new Ground() + + constructor() { + this.snowflakes = []; + for (let i = 0; i < snowflake_max_count; i++){ + this.snowflakes.push(this.getNewSnowflake()); + } + this.snowflakes.sort((a, b) => { + if (a.radius < b.radius){ + return -1; + } + if (a.radius > b.radius){ + return 1; + } + return 0; + }); + this.backgroundSnowflakes = this.snowflakes.slice(0, snowflake_max_count * 2 / 3); + this.foregroundSnowflakes = this.snowflakes.slice(snowflake_max_count * 2 / 3, snowflake_max_count); + this.updateSettings(); + } + + getNewSnowflake(){ + return new Snowflake( + p.random(p.width), + p.random(-snowflake_max_r, p.height), + p.random(snowflake_min_r, snowflake_max_r), + ); + } + + updateSettings(){ + let allowed_snowflakes_count = $('#snow_intensity').val() as number; + let visible_snowflakes = p.shuffle(this.snowflakes.filter(s => !s.hidden)); + let hidden_snowflakes = p.shuffle(this.snowflakes.filter(s => s.hidden)); + let snowflakes_to_add = allowed_snowflakes_count - visible_snowflakes.length; + if (snowflakes_to_add > 0){ + for (let i = 0; i < snowflakes_to_add; i++){ + hidden_snowflakes[i].hidden = false; + } + } + if (snowflakes_to_add < 0){ + for (let i = 0; i < p.abs(snowflakes_to_add); i++){ + visible_snowflakes[i].hidden = true; + } + } + this.bgColor.setBlue( + p.map( + allowed_snowflakes_count, + 0, snowflake_max_count, + 255, 170 + ) + ); + } + + update(){ + this.ground.update(); + this.wind_direction = p.sin(p.frameCount / 1000); + this.snowflakes.forEach(s => s.update(this.wind_direction)); + } + + display(asForeground?: boolean){ + if (asForeground){ + this.foregroundSnowflakes.forEach(s => s.display()); + } else { + p.background(this.bgColor); + this.ground.display(); + this.backgroundSnowflakes.forEach(s => s.display()); + } + } + +} + +class Snowflake{ + + pos: p5.Vector + radius: number + alpha: number + hidden: boolean + rotateDir: number + rotation: number = 0 + peakCount: number + + constructor(x, y, r) { + this.pos = p.createVector(x, y); + this.radius = r; + this.hidden = false; + this.alpha = 0; + this.rotateDir = p.random([-1, 1]) * p.random(0.01, 0.03); + this.peakCount = p.random([4, 5, 6]); + } + + update(wind_direction: number){ + let dir = p.createVector( + p.map(this.radius, snowflake_min_r, snowflake_max_r, 0, 1) * wind_direction, + p.map(this.radius, snowflake_min_r, snowflake_max_r, 0.5, 1) * 2 + ); + this.pos.add(dir); + this.rotation += this.rotateDir; + if (this.pos.y > p.height + this.radius){ + this.pos.y = -this.radius; + } + if (this.pos.x > p.width + this.radius){ + this.pos.x = -this.radius; + } else if (this.pos.x < -this.radius){ + this.pos.x = p.width + this.radius; + } + if (this.hidden && this.alpha > 0){ + this.alpha -= 0.015; + } else if (this.alpha < 1){ + this.alpha += 0.015; + } + } + + display(){ + p.push(); + p.strokeWeight(1); + p.stroke(255, this.alpha * 255); + p.fill(255, this.alpha * 255); + p.translate(this.pos); + p.rotate(this.rotation % p.TWO_PI); + + for (let rad = 0; rad < p.PI; rad += p.PI / this.peakCount){ + let x1 = p.cos(rad) * this.radius; + let y1 = p.sin(rad) * this.radius; + let x2 = p.cos(rad + p.PI) * this.radius; + let y2 = p.sin(rad + p.PI) * this.radius; + p.line(x1, y1, x2, y2); + } + + p.pop(); + } + +} + +class Ground{ + + points: p5.Vector[] + + constructor() { + this.createPoints(); + } + + createPoints(){ + this.points = []; + for (let x = 0; x < p.width; x++){ + let vector = p.createVector( + x, + p.noise(x / 300) * 150 + ); + this.points.push(vector); + } + } + + update(){ + + } + + display(){ + p.push(); + p.fill(220, 220, 255); + p.stroke(50, 50, 150); + p.strokeWeight(2); + p.beginShape(); + + for (let point of this.points){ + p.vertex(point.x, point.y + p.height / 2); + } + p.vertex(p.width, p.height); + p.vertex(0, p.height); + + p.endShape(p.CLOSE); + + p.pop(); + } + +} + diff --git a/public/data/scripts/ts/ball.ts b/public/data/scripts/ts/ball.ts new file mode 100644 index 0000000..67400b7 --- /dev/null +++ b/public/data/scripts/ts/ball.ts @@ -0,0 +1,39 @@ +class Ball extends Decoration{ + + graphics: p5.Graphics + + constructor(properties: object){ + super(properties); + this.createGraphics(); + } + + createGraphics(){ + let img = images['ball']; + this.graphics = p.createGraphics(img.width, img.height); + this.updateColor(); + } + + updateColor(){ + let img = images['ball']; + this.graphics.clear(); + this.graphics.tint(this.colors[0]); + this.graphics.image(img, 0, 0); + } + + + display(pos?: p5.Vector, dim?: p5.Vector){ + super.display(pos, dim); + + p.image(this.graphics, 0, 0, this.radius * 2, this.radius * 2); + if (this.mouseIsOver){ + this.brightness(70); + } + + p.pop(); + } + + update(){ + super.update(); + } + +} \ No newline at end of file diff --git a/public/data/scripts/ts/chain.ts b/public/data/scripts/ts/chain.ts new file mode 100644 index 0000000..68aa537 --- /dev/null +++ b/public/data/scripts/ts/chain.ts @@ -0,0 +1,167 @@ +import has = Reflect.has; + +class Chain extends Decoration{ + + p1: p5.Vector = p.createVector(-0.65, 0) + p2: p5.Vector = p.createVector(0.65, 0) + + p1IsBoundToMouse: boolean = false + p2IsBoundToMouse: boolean = false + + placedOnce: boolean = false + + points: {x: number, y: number}[] = [] + lights: {x: number, y: number}[] = [] + + constructor(properties: object){ + super(properties); + this.generate(); + } + + get properties(): object{ + let obj = super.properties; + obj['p1'] = this.p1; + obj['p2'] = this.p2; + return obj; + } + + generate(){ + let d = p.dist(this.p1.x, this.p1.y, this.p2.x, this.p2.y); + let m = p.abs((this.p2.y - this.p1.y) / (this.p2.x - this.p1.x)); + let a = -1 / d - m / 10; + + let b = (this.p1.y - this.p2.y + a * p.pow(this.p2.x, 2) - a * p.pow(this.p1.x, 2)) / + (this.p1.x - this.p2.x); + if (this.p1.x - this.p2.x === 0) + b = 0; + let c = this.p1.y - a * p.pow(this.p1.x, 2) - b * this.p1.x; + let func = x => a * x * x + b * x + c; + + let detail = 40; + let points = []; + for (let i = 0; i <= detail; i++){ + let point = {x: 0, y: 0}; + point.x = this.p1.x + (this.p2.x - this.p1.x) / detail * i; + point.y = func(point.x); + points.push(point); + } + let lightDist = 0.35; + let lastLight = {x: Infinity, y: Infinity}; + let lights = [] + detail = 300; + for (let i = 0; i <= detail; i++){ + let point = {x: 0, y: 0, hasLight: false}; + point.x = this.p1.x + (this.p2.x - this.p1.x) / detail * i; + point.y = func(point.x); + if (p.dist(point.x, point.y, lastLight.x, lastLight.y) >= lightDist){ + lights.push(point); + lastLight = point; + } + } + this.points = points; + this.lights = lights; + } + + display(pos?: p5.Vector, dim?: p5.Vector){ + super.display(pos, dim); + + p.strokeWeight(0.05); + p.stroke(0); + p.noFill(); + p.beginShape(); + for (let point of this.points) + p.vertex(point.x, point.y); + p.endShape(); + + p.strokeWeight(0.01); + let i = 0; + for (let point of this.lights){ + let colorIndex = (i + p.int(p.frameCount / 30)) % this.colors.length; + p.fill(this.colors[colorIndex]); + p.ellipse(point.x, point.y, 0.2, 0.2); + i++; + } + + p.pop(); + } + + get hasValidPosition(): boolean{ + return game.tree.containsPosition(this.realPosByAnchor(this.p1), true) + && game.tree.containsPosition(this.realPosByAnchor(this.p2), true); + } + + realPosByAnchor(anchor): p5.Vector{ + return p5.Vector.add(p5.Vector.mult(p5.Vector.add(this.pos, anchor), game.tree.sizeMultiplier), game.center); + } + + realPointDistToAnchor(point, anchor){ + let pos = this.realPosByAnchor(anchor); + return p.dist(pos.x, pos.y, point.x, point.y); + } + + isMouseOverAnchor(anchor){ + return this.realPointDistToAnchor(p.createVector(p.mouseX, p.mouseY), anchor) <= 0.5 * game.tree.sizeMultiplier; + } + + get mouseIsOver(): boolean{ + return this.isTaken && (this.isMouseOverAnchor(this.p1) || this.isMouseOverAnchor(this.p2)); + } + + //Mouse is over this + mousePressed() { + super.mousePressed(); + if (this.isMouseOverAnchor(this.p1)){ + this.p1IsBoundToMouse = true; + } else if (this.isMouseOverAnchor(this.p2)){ + this.p2IsBoundToMouse = true; + } + } + + updateFromPoint(point, other, x, y){ + if (this.placedOnce){ + let pointRelative = p.createVector(x - this.pos.x, y - this.pos.y); + point.set(pointRelative); + let pointReal = p5.Vector.add(this.pos, point); + let otherReal = p5.Vector.add(this.pos, other); + let newPos = p5.Vector.div(p5.Vector.add(pointReal, otherReal), 2); + point.set(p5.Vector.sub(pointReal, newPos)); + other.set(p5.Vector.mult(point, -1)); + this.pos.set(newPos); + } else { + this.pos.set(x - point.x, y - point.y); + } + } + + update(){ + let x = (p.mouseX - game.center.x) / game.tree.sizeMultiplier, + y = (p.mouseY - game.center.y) / game.tree.sizeMultiplier; + if (this.isBoundToMouse){ + if (this.p1IsBoundToMouse){ + this.updateFromPoint(this.p1, this.p2, x, y); + } + if (this.p2IsBoundToMouse){ + this.updateFromPoint(this.p2, this.p1, x, y); + } + this.generate(); + } else { + super.update(); + } + + if (this.isTaken && !this.isBoundToMouse){ + this.placedOnce = true; + } + } + + toJSON(index){ + let list = [ + "p1", + "p2" + ] + let obj = super.toJSON(index); + for (let item of list){ + obj[item] = this[item]; + } + return obj; + } + +} \ No newline at end of file diff --git a/public/data/scripts/ts/container.ts b/public/data/scripts/ts/container.ts new file mode 100644 index 0000000..26907c6 --- /dev/null +++ b/public/data/scripts/ts/container.ts @@ -0,0 +1,84 @@ +class Container{ + + index: number + pos: p5.Vector = p.createVector() + dim: p5.Vector = p.createVector() + + content: Tree | Decoration + + constructor(index: number, content: Tree | Decoration){ + this.index = index; + this.content = content; + } + + get mouseIsOver(): boolean{ + return p.mouseX > this.pos.x && p.mouseX < this.pos.x + this.dim.x && + p.mouseY > this.pos.y && p.mouseY < this.pos.y + this.dim.y; + } + + get center(): p5.Vector{ + return p5.Vector.add(this.pos, p5.Vector.div(this.dim, 2)); + } + + display(){ + let w = this.dim.x, + h = this.dim.y; + let x = this.pos.x + w / 2, + y = this.pos.y + h / 2; + p.image(images['box'], x, y, w, h); + + if (this.content !== game.tree){ + this.content.display(); + } + + if (this.mouseIsOver){ + p.fill(0, 50); + p.noStroke(); + p.rect(x - w / 2, y - h / 2, w , h); + } + + } + + update(){ + let currentCount = game.currentContainers.length; + let w = p.width / currentCount, + h = w; + let x = w * this.index, + y = p.height - h; + if (this.content instanceof Decoration){ + let otherCount = game.containers.filter(c => game.currentContainers.find(ic => ic == c) == null).length; + w = h = p.width / otherCount; + x = w * this.index; + y = p.height - h; + x += p.width / 2 - w * currentCount / 2; + } + this.pos.set(x, y); + this.dim.set(w, h); + + if (this.content !== game.tree) + this.content.update(); + } + + mousePressed(){ + if (this.content instanceof Tree){ + game.tree.animationDirection = -1; + if (this.content === game.tree){ + game.tree = new Tree(null); + } else { + game.tree = this.content; + game.tree.animationDirection = 1; + } + } + if (this.content instanceof Decoration && !game.tree.isPlaceholder){ + let decoration = Decoration.Create(this.content.properties); + decoration.isTaken = true; + decoration.isBoundToMouse = true; + game.tree.decorations.push(decoration); + + if (decoration instanceof Chain){ + decoration.p1IsBoundToMouse = true; + } + } + } + +} \ No newline at end of file diff --git a/public/data/scripts/ts/decoration.ts b/public/data/scripts/ts/decoration.ts new file mode 100644 index 0000000..0071267 --- /dev/null +++ b/public/data/scripts/ts/decoration.ts @@ -0,0 +1,194 @@ +class Decoration{ + + pos: p5.Vector = p.createVector() + colors: number[][] + radius: number + + sizeMultiplier: number + container: Container + + isTaken: boolean = false + isBoundToMouse: boolean = false; + isToDelete: boolean = false; + needsValidation: boolean = false; + + isSelected: boolean = false; + + type: string + + constructor(properties: object){ + for (let key in properties){ + if (properties.hasOwnProperty(key)){ + if (Array.isArray(properties[key])){ + this[key] = arrayCopy(properties[key]); + } else { + this[key] = properties[key]; + } + } + } + } + + get properties(): object{ + let colors = []; + for (let i = 0; i < this.colors.length; i++){ + let color = []; + for (let c of this.colors[i]){ + color.push(c); + } + colors.push(color); + } + return { + radius: this.radius, + colors: colors, + type: this.type + }; + } + + get mouseIsOver(): boolean{ + if (this.isTaken){ + let pos = this.realPos; + return p.dist(pos.x, pos.y, p.mouseX, p.mouseY) <= this.radius * game.tree.sizeMultiplier; + } + return false; + } + + get hasValidPosition(): boolean{ + return game.tree.containsPosition(this.realPos, true); + } + + get realPos(): p5.Vector{ + return p5.Vector.add(p5.Vector.mult(this.pos, game.tree.sizeMultiplier), game.center); + } + + static Create(properties: object): Decoration{ + switch (properties['type']){ + case 'ball': + return new Ball(properties); + case 'star': + return new Star(properties); + case 'chain': + return new Chain(properties); + } + } + + display(pos?: p5.Vector, dim?: p5.Vector){ + let sizeMultiplier = this.sizeMultiplier; + if (pos || dim){ + sizeMultiplier = dim.y * 0.6; + } else { + pos = this.pos; + } + p.push(); + p.translate(pos); + p.scale(sizeMultiplier); + } + + brightness(value: number){ + p.noStroke(); + p.fill(0, 0, 0, value); + p.ellipse(0, 0, this.radius * 2, this.radius * 2); + } + + update(){ + if (!this.isTaken){ + this.pos = this.container.center; + this.sizeMultiplier = this.container.dim.y * 0.6; + } else { + this.sizeMultiplier = 1; + } + if (this.isBoundToMouse){ + let x = (p.mouseX - game.center.x) / game.tree.sizeMultiplier, + y = (p.mouseY - game.center.y) / game.tree.sizeMultiplier; + this.pos.set(x, y); + } + } + + //Assumes mouse is over this + mousePressed(){ + this.isBoundToMouse = true; + } + + //Always called + mouseReleased(){ + + } + + toJSON(index){ + let list = [ + "pos", + "colors", + "radius", + "type" + ] + let obj = {}; + for (let item of list){ + obj[item] = this[item]; + } + return obj; + } + + static restoreFrom(rawDeco: object){ + let props = {}; + for (let key in rawDeco){ + if (['pos', 'p1', 'p2'].find(s => s === key) === undefined){ + props[key] = rawDeco[key]; + } + } + let deco = Decoration.Create(props); + deco.isTaken = true; + deco.pos.x = rawDeco['pos'].x; + deco.pos.y = rawDeco['pos'].y; + + if (deco instanceof Chain){ + deco.p1.set(rawDeco['p1'].x, rawDeco['p1'].y); + deco.p2.set(rawDeco['p2'].x, rawDeco['p2'].y); + deco.generate(); + } + + return deco; + } +} + +function darker(c){ + let newC = [] + for (let v of c){ + newC.push(p.constrain(v * 0.6, 0, 255)); + } + return newC; +} + +function arrayCopy(a){ + let newArr = []; + for (let c of a){ + let copy = c; + if (Array.isArray(c)){ + copy = arrayCopy(c); + } + newArr.push(copy); + } + return newArr; +} + +function equals(a1, a2){ + // if the other array is a falsy value, return + if (!a1) + return false; + + // compare lengths - can save a lot of time + if (a2.length != a1.length) + return false; + + for (let i = 0, l=a2.length; i < l; i++) { + // Check if we have nested arrays + if (a2[i] instanceof Array && a1[i] instanceof Array) { + // recurse into the nested arrays + if (!a2[i].equals(a1[i])) + return false; + } + else if (a2[i] != a1[i]) { + // Warning - two different object instances will never be equal: {x:20} != {x:20} + return false; + } + } + return true; +} \ No newline at end of file diff --git a/public/data/scripts/ts/definitions/p5.d/p5.d.ts b/public/data/scripts/ts/definitions/p5.d/p5.d.ts new file mode 100644 index 0000000..fa602d7 --- /dev/null +++ b/public/data/scripts/ts/definitions/p5.d/p5.d.ts @@ -0,0 +1,12050 @@ +// This file was auto-generated. Please do not edit it. + +declare class p5 { + // Properties from p5 + + readonly P2D: 'p2d' + + // src/color/creating_reading.js + readonly WEBGL: 'webgl' + /** + * HALF_PI is a mathematical constant with the value + * 1.57079632679489661923. It is half the ratio of + * the circumference of a circle to its diameter. It + * is useful in combination with the trigonometric + * functions sin() and cos(). + * + */ + readonly HALF_PI: number + /** + * PI is a mathematical constant with the value + * 3.14159265358979323846. It is the ratio of the + * circumference of a circle to its diameter. It is + * useful in combination with the trigonometric + * functions sin() and cos(). + * + */ + readonly PI: number + /** + * QUARTER_PI is a mathematical constant with the + * value 0.7853982. It is one quarter the ratio of + * the circumference of a circle to its diameter. It + * is useful in combination with the trigonometric + * functions sin() and cos(). + * + */ + readonly QUARTER_PI: number + /** + * TAU is an alias for TWO_PI, a mathematical + * constant with the value 6.28318530717958647693. It + * is twice the ratio of the circumference of a + * circle to its diameter. It is useful in + * combination with the trigonometric functions sin() + * and cos(). + * + */ + readonly TAU: number + /** + * TWO_PI is a mathematical constant with the value + * 6.28318530717958647693. It is twice the ratio of + * the circumference of a circle to its diameter. It + * is useful in combination with the trigonometric + * functions sin() and cos(). + * + */ + readonly TWO_PI: number + /** + * Constant to be used with angleMode() function, to + * set the mode which p5.js interprates and + * calculates angles (either DEGREES or RADIANS). + * + */ + readonly DEGREES: 'degrees' + /** + * Constant to be used with angleMode() function, to + * set the mode which p5.js interprates and + * calculates angles (either RADIANS or DEGREES). + * + */ + readonly RADIANS: 'radians' + readonly CORNER: 'corner' + readonly CORNERS: 'corners' + readonly RADIUS: 'radius' + readonly RIGHT: 'right' + readonly LEFT: 'left' + readonly CENTER: 'center' + + // src/color/setting.js + readonly TOP: 'top' + readonly BOTTOM: 'bottom' + readonly BASELINE: 'alphabetic' + readonly POINTS: 0x0000 + readonly LINES: 0x0001 + readonly LINE_STRIP: 0x0003 + readonly LINE_LOOP: 0x0002 + readonly TRIANGLES: 0x0004 + readonly TRIANGLE_FAN: 0x0006 + readonly TRIANGLE_STRIP: 0x0005 + readonly QUADS: 'quads' + readonly QUAD_STRIP: 'quad_strip' + readonly CLOSE: 'close' + readonly OPEN: 'open' + readonly CHORD: 'chord' + readonly PIE: 'pie' + readonly PROJECT: 'square' + readonly SQUARE: 'butt' + readonly ROUND: 'round' + + // src/core/2d_primitives.js + readonly BEVEL: 'bevel' + readonly MITER: 'miter' + readonly RGB: 'rgb' + readonly HSB: 'hsb' + readonly HSL: 'hsl' + readonly BLEND: 'source-over' + readonly ADD: 'lighter' + readonly DARKEST: 'darkest' + readonly LIGHTEST: 'lighten' + readonly DIFFERENCE: 'difference' + readonly EXCLUSION: 'exclusion' + + // src/core/attributes.js + readonly MULTIPLY: 'multiply' + readonly SCREEN: 'screen' + readonly REPLACE: 'copy' + readonly OVERLAY: 'overlay' + readonly HARD_LIGHT: 'hard-light' + readonly SOFT_LIGHT: 'soft-light' + readonly DODGE: 'color-dodge' + + // src/core/constants.js + readonly BURN: 'color-burn' + readonly THRESHOLD: 'threshold' + readonly GRAY: 'gray' + readonly OPAQUE: 'opaque' + readonly INVERT: 'invert' + readonly POSTERIZE: 'posterize' + readonly DILATE: 'dilate' + readonly ERODE: 'erode' + readonly BLUR: 'blur' + readonly NORMAL: 'normal' + readonly ITALIC: 'italic' + readonly BOLD: 'bold' + readonly LANDSCAPE: 'landscape' + readonly PORTRAIT: 'portrait' + /** + * The system variable frameCount contains the number + * of frames that have been displayed since the + * program started. Inside setup() the value is 0, + * after the first iteration of draw it is 1, etc. + * + */ + frameCount: number + /** + * Confirms if the window a p5.js program is in is + * "focused," meaning that the sketch will accept + * mouse or keyboard input. This variable is "true" + * if the window is focused and "false" if not. + * + */ + focused: boolean + /** + * System variable that stores the width of the + * entire screen display. This is used to run a + * full-screen program on any display size. + * + */ + displayWidth: number + /** + * System variable that stores the height of the + * entire screen display. This is used to run a + * full-screen program on any display size. + * + */ + displayHeight: number + /** + * System variable that stores the width of the inner + * window, it maps to window.innerWidth. + * + */ + windowWidth: number + /** + * System variable that stores the height of the + * inner window, it maps to window.innerHeight. + * + */ + windowHeight: number + /** + * System variable that stores the width of the + * drawing canvas. This value is set by the first + * parameter of the createCanvas() function. For + * example, the function call createCanvas(320, 240) + * sets the width variable to the value 320. The + * value of width defaults to 100 if createCanvas() + * is not used in a program. + * + */ + width: number + /** + * System variable that stores the height of the + * drawing canvas. This value is set by the second + * parameter of the createCanvas() function. For + * example, the function call createCanvas(320, 240) + * sets the height variable to the value 240. The + * value of height defaults to 100 if createCanvas() + * is not used in a program. + * + */ + height: number + /** + * The system variable deviceOrientation always + * contains the orientation of the device. The value + * of this variable will either be set 'landscape' or + * 'portrait'. If no data is available it will be set + * to 'undefined'. either LANDSCAPE or PORTRAIT. + * + */ + deviceOrientation: any + /** + * The system variable accelerationX always contains + * the acceleration of the device along the x axis. + * Value is represented as meters per second squared. + * + */ + accelerationX: number + /** + * The system variable accelerationY always contains + * the acceleration of the device along the y axis. + * Value is represented as meters per second squared. + * + */ + accelerationY: number + /** + * The system variable accelerationZ always contains + * the acceleration of the device along the z axis. + * Value is represented as meters per second squared. + * + */ + accelerationZ: number + /** + * The system variable pAccelerationX always contains + * the acceleration of the device along the x axis in + * the frame previous to the current frame. Value is + * represented as meters per second squared. + * + */ + pAccelerationX: number + /** + * The system variable pAccelerationY always contains + * the acceleration of the device along the y axis in + * the frame previous to the current frame. Value is + * represented as meters per second squared. + * + */ + pAccelerationY: number + /** + * The system variable pAccelerationZ always contains + * the acceleration of the device along the z axis in + * the frame previous to the current frame. Value is + * represented as meters per second squared. + * + */ + pAccelerationZ: number + /** + * The system variable rotationX always contains the + * rotation of the device along the x axis. Value is + * represented as 0 to +/-180 degrees. Note: The + * order the rotations are called is important, ie. + * if used together, it must be called in the order + * Z-X-Y or there might be unexpected behaviour. + * + */ + rotationX: number + /** + * The system variable rotationY always contains the + * rotation of the device along the y axis. Value is + * represented as 0 to +/-90 degrees. Note: The + * order the rotations are called is important, ie. + * if used together, it must be called in the order + * Z-X-Y or there might be unexpected behaviour. + * + */ + rotationY: number + /** + * The system variable rotationZ always contains the + * rotation of the device along the z axis. Value is + * represented as 0 to 359 degrees. Unlike rotationX + * and rotationY, this variable is available for + * devices with a built-in compass only. + * + * + * Note: The order the rotations are called is + * important, ie. if used together, it must be called + * in the order Z-X-Y or there might be unexpected + * behaviour. + * + */ + rotationZ: number + /** + * The system variable pRotationX always contains the + * rotation of the device along the x axis in the + * frame previous to the current frame. Value is + * represented as 0 to +/-180 degrees. pRotationX + * can also be used with rotationX to determine the + * rotate direction of the device along the X-axis. + * + */ + pRotationX: number + /** + * The system variable pRotationY always contains the + * rotation of the device along the y axis in the + * frame previous to the current frame. Value is + * represented as 0 to +/-90 degrees. pRotationY can + * also be used with rotationY to determine the + * rotate direction of the device along the Y-axis. + * + */ + pRotationY: number + /** + * The system variable pRotationZ always contains the + * rotation of the device along the z axis in the + * frame previous to the current frame. Value is + * represented as 0 to 359 degrees. pRotationZ can + * also be used with rotationZ to determine the + * rotate direction of the device along the Z-axis. + * + */ + pRotationZ: number + turnAxis: string + /** + * The boolean system variable keyIsPressed is true + * if any key is pressed and false if no keys are + * pressed. + * + */ + keyIsPressed: boolean + /** + * The system variable key always contains the value + * of the most recent key on the keyboard that was + * typed. To get the proper capitalization, it is + * best to use it within keyTyped(). For non-ASCII + * keys, use the keyCode variable. + * + */ + key: string + /** + * The variable keyCode is used to detect special + * keys such as BACKSPACE, DELETE, ENTER, RETURN, + * TAB, ESCAPE, SHIFT, CONTROL, OPTION, ALT, + * UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW. You + * can also check for custom keys by looking up the + * keyCode of any key on a site like this: + * keycode.info. + * + */ + keyCode: number + /** + * The system variable mouseX always contains the + * current horizontal position of the mouse, relative + * to (0, 0) of the canvas. If touch is used instead + * of mouse input, mouseX will hold the x value of + * the most recent touch point. + * + */ + mouseX: number + /** + * The system variable mouseY always contains the + * current vertical position of the mouse, relative + * to (0, 0) of the canvas. If touch is used instead + * of mouse input, mouseY will hold the y value of + * the most recent touch point. + * + */ + mouseY: number + /** + * The system variable pmouseX always contains the + * horizontal position of the mouse or finger in the + * frame previous to the current frame, relative to + * (0, 0) of the canvas. + * + */ + pmouseX: number + /** + * The system variable pmouseY always contains the + * vertical position of the mouse or finger in the + * frame previous to the current frame, relative to + * (0, 0) of the canvas. + * + */ + pmouseY: number + /** + * The system variable winMouseX always contains the + * current horizontal position of the mouse, relative + * to (0, 0) of the window. + * + */ + winMouseX: number + /** + * The system variable winMouseY always contains the + * current vertical position of the mouse, relative + * to (0, 0) of the window. + * + */ + winMouseY: number + /** + * The system variable pwinMouseX always contains the + * horizontal position of the mouse in the frame + * previous to the current frame, relative to (0, 0) + * of the window. + * + */ + pwinMouseX: number + /** + * The system variable pwinMouseY always contains the + * vertical position of the mouse in the frame + * previous to the current frame, relative to (0, 0) + * of the window. + * + */ + pwinMouseY: number + /** + * Processing automatically tracks if the mouse + * button is pressed and which button is pressed. The + * value of the system variable mouseButton is either + * LEFT, RIGHT, or CENTER depending on which button + * was pressed last. Warning: different browsers may + * track mouseButton differently. + * + */ + mouseButton: any + /** + * The boolean system variable mouseIsPressed is true + * if the mouse is pressed and false if not. + * + */ + mouseIsPressed: boolean + /** + * The system variable touches[] contains an array of + * the positions of all current touch points, + * relative to (0, 0) of the canvas, and IDs + * identifying a unique touch as it moves. Each + * element in the array is an object with x, y, and + * id properties. The touches[] array is not + * supported on Safari and IE on touch-based desktops + * (laptops). + * + */ + touches: object[] + /** + * Uint8ClampedArray containing the values for all + * the pixels in the display window. These values are + * numbers. This array is the size (include an + * appropriate factor for pixelDensity) of the + * display window x4, representing the R, G, B, A + * values in order for each pixel, moving from left + * to right across each row, then down each column. + * Retina and other high density displays will have + * more pixels[] (by a factor of pixelDensity^2). For + * example, if the image is 100x100 pixels, there + * will be 40,000. On a retina display, there will be + * 160,000. The first four values (indices 0-3) in + * the array will be the R, G, B, A values of the + * pixel at (0, 0). The second four values (indices + * 4-7) will contain the R, G, B, A values of the + * pixel at (1, 0). More generally, to set values for + * a pixel at (x, y): + * + * var d = pixelDensity(); for (var i = 0; i < d; + * i++) { for (var j = 0; j < d; j++) { // loop over + * idx = 4 * ((y * d + j) * width * d + (x * d + i)); + * pixels[idx] = r; pixels[idx+1] = g; pixels[idx+2] + * = b; pixels[idx+3] = a; } } + * + * While the above method is complex, it is flexible + * enough to work with any pixelDensity. Note that + * set() will automatically take care of setting all + * the appropriate values in pixels[] for a given (x, + * y) at any pixelDensity, but the performance may + * not be as fast when lots of modifications are made + * to the pixel array. + * + * + * Before accessing this array, the data must loaded + * with the loadPixels() function. After the array + * data has been modified, the updatePixels() + * function must be run to update the changes. + * + * + * Note that this is not a standard javascript array. + * This means that standard javascript functions such + * as slice() or arrayCopy() do not work. + * + */ + pixels: number[] + /** + * p5.soundOut is the p5.sound master output. It + * sends output to the destination of this window's + * web audio context. It contains Web Audio API nodes + * including a dyanmicsCompressor (.limiter), and + * Gain Nodes for .input and .output. + * + */ + soundOut: object + + /** + * This is the p5 instance constructor. A p5 instance + * holds all the properties and methods related to a + * p5 sketch. It expects an incoming sketch closure + * and it can also take an optional node parameter + * for attaching the generated p5 canvas to a node. + * The sketch closure takes the newly created p5 + * instance as its sole argument and may optionally + * set preload(), setup(), and/or draw() properties + * on it for running a sketch. + * + * A p5 sketch can run in "global" or "instance" + * mode: "global" - all properties and methods are + * attached to the window "instance" - all properties + * and methods are bound to this p5 object + * + * @param sketch a closure that can set optional + * preload(), setup(), and/or draw() properties on + * the given p5 instance + * @param [node] element to attach canvas to, if a + * boolean is passed in use it as sync + * @param [sync] start synchronously (optional) + * @return a p5 instance + */ + constructor(sketch: Function, node?: HTMLElement|boolean, sync?: boolean) + + /** + * Extracts the alpha value from a color or pixel + * array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the alpha value + */ + alpha(color: p5.Color|number[]|string): number + + /** + * Extracts the blue value from a color or pixel + * array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the blue value + */ + blue(color: p5.Color|number[]|string): number + + /** + * Extracts the HSB brightness value from a color or + * pixel array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the brightness value + */ + brightness(color: p5.Color|number[]|string): number + + /** + * Creates colors for storing in variables of the + * color datatype. The parameters are interpreted as + * RGB or HSB values depending on the current + * colorMode(). The default mode is RGB values from 0 + * to 255 and, therefore, the function call + * color(255, 204, 0) will return a bright yellow + * color. Note that if only one value is provided to + * color(), it will be interpreted as a grayscale + * value. Add a second value, and it will be used for + * alpha transparency. When three values are + * specified, they are interpreted as either RGB or + * HSB values. Adding a fourth value applies alpha + * transparency. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * @param gray number specifying value between white + * and black. + * @param [alpha] alpha value relative to current + * color range (default is 0-255) + * @return resulting color + */ + color(gray: number, alpha?: number): p5.Color + + /** + * Creates colors for storing in variables of the + * color datatype. The parameters are interpreted as + * RGB or HSB values depending on the current + * colorMode(). The default mode is RGB values from 0 + * to 255 and, therefore, the function call + * color(255, 204, 0) will return a bright yellow + * color. Note that if only one value is provided to + * color(), it will be interpreted as a grayscale + * value. Add a second value, and it will be used for + * alpha transparency. When three values are + * specified, they are interpreted as either RGB or + * HSB values. Adding a fourth value applies alpha + * transparency. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * @param v1 red or hue value relative to the current + * color range + * @param v2 green or saturation value relative to + * the current color range + * @param v3 blue or brightness value relative to the + * current color range + * @param [alpha] alpha value relative to current + * color range (default is 0-255) + */ + color(v1: number, v2: number, v3: number, alpha?: number): p5.Color + + /** + * Creates colors for storing in variables of the + * color datatype. The parameters are interpreted as + * RGB or HSB values depending on the current + * colorMode(). The default mode is RGB values from 0 + * to 255 and, therefore, the function call + * color(255, 204, 0) will return a bright yellow + * color. Note that if only one value is provided to + * color(), it will be interpreted as a grayscale + * value. Add a second value, and it will be used for + * alpha transparency. When three values are + * specified, they are interpreted as either RGB or + * HSB values. Adding a fourth value applies alpha + * transparency. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * @param value a color string + * @param [alpha] alpha value relative to current + * color range (default is 0-255) + */ + color(value: string, alpha?: number): p5.Color + + /** + * Creates colors for storing in variables of the + * color datatype. The parameters are interpreted as + * RGB or HSB values depending on the current + * colorMode(). The default mode is RGB values from 0 + * to 255 and, therefore, the function call + * color(255, 204, 0) will return a bright yellow + * color. Note that if only one value is provided to + * color(), it will be interpreted as a grayscale + * value. Add a second value, and it will be used for + * alpha transparency. When three values are + * specified, they are interpreted as either RGB or + * HSB values. Adding a fourth value applies alpha + * transparency. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + */ + color(values: number[]): p5.Color + + /** + * Creates colors for storing in variables of the + * color datatype. The parameters are interpreted as + * RGB or HSB values depending on the current + * colorMode(). The default mode is RGB values from 0 + * to 255 and, therefore, the function call + * color(255, 204, 0) will return a bright yellow + * color. Note that if only one value is provided to + * color(), it will be interpreted as a grayscale + * value. Add a second value, and it will be used for + * alpha transparency. When three values are + * specified, they are interpreted as either RGB or + * HSB values. Adding a fourth value applies alpha + * transparency. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + */ + color(color: p5.Color): p5.Color + + /** + * Extracts the green value from a color or pixel + * array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the green value + */ + green(color: p5.Color|number[]|string): number + + /** + * Extracts the hue value from a color or pixel + * array. Hue exists in both HSB and HSL. This + * function will return the HSB-normalized hue when + * supplied with an HSB color object (or when + * supplied with a pixel array while the color mode + * is HSB), but will default to the HSL-normalized + * hue otherwise. (The values will only be different + * if the maximum hue setting for each system is + * different.) + * + * @param color p5.Color object, color components, or + * CSS color + * @return the hue + */ + hue(color: p5.Color|number[]|string): number + + /** + * Blends two colors to find a third color somewhere + * between them. The amt parameter is the amount to + * interpolate between the two values where 0.0 equal + * to the first color, 0.1 is very near the first + * color, 0.5 is halfway in between, etc. An amount + * below 0 will be treated as 0. Likewise, amounts + * above 1 will be capped at 1. This is different + * from the behavior of lerp(), but necessary because + * otherwise numbers outside the range will produce + * strange and unexpected colors. The way that + * colours are interpolated depends on the current + * color mode. + * + * @param c1 interpolate from this color + * @param c2 interpolate to this color + * @param amt number between 0 and 1 + * @return interpolated color + */ + lerpColor(c1: p5.Color, c2: p5.Color, amt: number): p5.Color + + /** + * Extracts the HSL lightness value from a color or + * pixel array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the lightness + */ + lightness(color: p5.Color|number[]|string): number + + /** + * Extracts the red value from a color or pixel + * array. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the red value + */ + red(color: p5.Color|number[]|string): number + + // src/core/core.js + + /** + * Extracts the saturation value from a color or + * pixel array. Saturation is scaled differently in + * HSB and HSL. This function will return the HSB + * saturation when supplied with an HSB color object + * (or when supplied with a pixel array while the + * color mode is HSB), but will default to the HSL + * saturation otherwise. + * + * @param color p5.Color object, color components, or + * CSS color + * @return the saturation value + */ + saturation(color: p5.Color|number[]|string): number + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param color any value created by the color() + * function + * @chainable + */ + background(color: p5.Color): p5 + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param colorstring color string, possible formats + * include: integer rgb() or rgba(), percentage rgb() + * or rgba(), 3-digit hex, 6-digit hex + * @param [a] opacity of the background relative to + * current color range (default is 0-255) + * @chainable + */ + background(colorstring: string, a?: number): p5 + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param gray specifies a value between white and + * black + * @param [a] opacity of the background relative to + * current color range (default is 0-255) + * @chainable + */ + background(gray: number, a?: number): p5 + + // src/core/curves.js + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param v1 red or hue value (depending on the + * current color mode) + * @param v2 green or saturation value (depending on + * the current color mode) + * @param v3 blue or brightness value (depending on + * the current color mode) + * @param [a] opacity of the background relative to + * current color range (default is 0-255) + * @chainable + */ + background(v1: number, v2: number, v3: number, a?: number): p5 + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + * @chainable + */ + background(values: number[]): p5 + + /** + * The background() function sets the color used for + * the background of the p5.js canvas. The default + * background is light gray. This function is + * typically used within draw() to clear the display + * window at the beginning of each frame, but it can + * be used inside setup() to set the background on + * the first frame of animation or if the background + * need only be set once. The color is either + * specified in terms of the RGB, HSB, or HSL color + * depending on the current colorMode. (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. + * + * + * If a single string argument is provided, RGB, RGBA + * and Hex CSS color strings and all named color + * strings are supported. In this case, an alpha + * number value as a second argument is not + * supported, the RGBA form should be used. + * + * + * A p5.Color object can also be provided to set the + * background color. + * + * + * A p5.Image can also be provided to set the + * background iamge. + * + * @param image image created with loadImage() or + * createImage(), to set as background (must be same + * size as the sketch window) + * @param [a] opacity of the background relative to + * current color range (default is 0-255) + * @chainable + */ + background(image: p5.Image, a?: number): p5 + + /** + * Clears the pixels within a buffer. This function + * only works on p5.Canvas objects created with the + * createCanvas() function; it won't work with the + * main display window. Unlike the main graphics + * context, pixels in additional graphics areas + * created with createGraphics() can be entirely or + * partially transparent. This function clears + * everything to make all of the pixels 100% + * transparent. + * + * @chainable + */ + clear(): p5 + + /** + * colorMode() changes the way p5.js interprets color + * data. By default, the parameters for fill(), + * stroke(), background(), and color() are defined by + * values between 0 and 255 using the RGB color + * model. This is equivalent to setting + * colorMode(RGB, 255). Setting colorMode(HSB) lets + * you use the HSB system instead. By default, this + * is colorMode(HSB, 360, 100, 100, 1). You can also + * use HSL. Note: existing color objects remember + * the mode that they were created in, so you can + * change modes as you like without affecting their + * appearance. + * + * @param mode either RGB, HSB or HSL, corresponding + * to Red/Green/Blue and Hue/Saturation/Brightness + * (or Lightness) + * @param [max] range for all values + * @chainable + */ + colorMode(mode: COLOR_MODE, max?: number): p5 + + /** + * colorMode() changes the way p5.js interprets color + * data. By default, the parameters for fill(), + * stroke(), background(), and color() are defined by + * values between 0 and 255 using the RGB color + * model. This is equivalent to setting + * colorMode(RGB, 255). Setting colorMode(HSB) lets + * you use the HSB system instead. By default, this + * is colorMode(HSB, 360, 100, 100, 1). You can also + * use HSL. Note: existing color objects remember + * the mode that they were created in, so you can + * change modes as you like without affecting their + * appearance. + * + * @param mode either RGB, HSB or HSL, corresponding + * to Red/Green/Blue and Hue/Saturation/Brightness + * (or Lightness) + * @param max1 range for the red or hue depending on + * the current color mode + * @param max2 range for the green or saturation + * depending on the current color mode + * @param max3 range for the blue or + * brightness/lighntess depending on the current + * color mode + * @param [maxA] range for the alpha + * @chainable + */ + colorMode(mode: any, max1: number, max2: number, max3: number, maxA?: number): p5 + + /** + * Sets the color used to fill shapes. For example, + * if you run fill(204, 102, 0), all subsequent + * shapes will be filled with orange. This color is + * either specified in terms of the RGB or HSB color + * depending on the current colorMode(). (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. If a single string argument is + * provided, RGB, RGBA and Hex CSS color strings and + * all named color strings are supported. In this + * case, an alpha number value as a second argument + * is not supported, the RGBA form should be used. + * + * + * A p5 Color object can also be provided to set the + * fill color. + * + * @param v1 red or hue value relative to the current + * color range + * @param v2 green or saturation value relative to + * the current color range + * @param v3 blue or brightness value relative to the + * current color range + * @chainable + */ + fill(v1: number, v2?: number, v3?: number, alpha?: number): p5 + + /** + * Sets the color used to fill shapes. For example, + * if you run fill(204, 102, 0), all subsequent + * shapes will be filled with orange. This color is + * either specified in terms of the RGB or HSB color + * depending on the current colorMode(). (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. If a single string argument is + * provided, RGB, RGBA and Hex CSS color strings and + * all named color strings are supported. In this + * case, an alpha number value as a second argument + * is not supported, the RGBA form should be used. + * + * + * A p5 Color object can also be provided to set the + * fill color. + * + * @param value a color string + * @chainable + */ + fill(value: string, alpha?: number): p5 + + /** + * Sets the color used to fill shapes. For example, + * if you run fill(204, 102, 0), all subsequent + * shapes will be filled with orange. This color is + * either specified in terms of the RGB or HSB color + * depending on the current colorMode(). (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. If a single string argument is + * provided, RGB, RGBA and Hex CSS color strings and + * all named color strings are supported. In this + * case, an alpha number value as a second argument + * is not supported, the RGBA form should be used. + * + * + * A p5 Color object can also be provided to set the + * fill color. + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + * @chainable + */ + fill(values: number[]): p5 + + /** + * Sets the color used to fill shapes. For example, + * if you run fill(204, 102, 0), all subsequent + * shapes will be filled with orange. This color is + * either specified in terms of the RGB or HSB color + * depending on the current colorMode(). (The default + * color space is RGB, with each value in the range + * from 0 to 255). The alpha range by default is also + * 0 to 255. If a single string argument is + * provided, RGB, RGBA and Hex CSS color strings and + * all named color strings are supported. In this + * case, an alpha number value as a second argument + * is not supported, the RGBA form should be used. + * + * + * A p5 Color object can also be provided to set the + * fill color. + * + * @param color the fill color + * @chainable + */ + fill(color: p5.Color): p5 + + /** + * Disables filling geometry. If both noStroke() and + * noFill() are called, nothing will be drawn to the + * screen. + * + * @chainable + */ + noFill(): p5 + + // src/core/environment.js + + /** + * Disables drawing the stroke (outline). If both + * noStroke() and noFill() are called, nothing will + * be drawn to the screen. + * + * @chainable + */ + noStroke(): p5 + + /** + * Sets the color used to draw lines and borders + * around shapes. This color is either specified in + * terms of the RGB or HSB color depending on the + * current colorMode() (the default color space is + * RGB, with each value in the range from 0 to 255). + * The alpha range by default is also 0 to 255. If a + * single string argument is provided, RGB, RGBA and + * Hex CSS color strings and all named color strings + * are supported. In this case, an alpha number value + * as a second argument is not supported, the RGBA + * form should be used. + * + * + * A p5 Color object can also be provided to set the + * stroke color. + * + * @param v1 red or hue value relative to the current + * color range + * @param v2 green or saturation value relative to + * the current color range + * @param v3 blue or brightness value relative to the + * current color range + * @chainable + */ + stroke(v1: number, v2?: number, v3?: number, alpha?: number): p5 + + /** + * Sets the color used to draw lines and borders + * around shapes. This color is either specified in + * terms of the RGB or HSB color depending on the + * current colorMode() (the default color space is + * RGB, with each value in the range from 0 to 255). + * The alpha range by default is also 0 to 255. If a + * single string argument is provided, RGB, RGBA and + * Hex CSS color strings and all named color strings + * are supported. In this case, an alpha number value + * as a second argument is not supported, the RGBA + * form should be used. + * + * + * A p5 Color object can also be provided to set the + * stroke color. + * + * @param value a color string + * @chainable + */ + stroke(value: string, alpha?: number): p5 + + /** + * Sets the color used to draw lines and borders + * around shapes. This color is either specified in + * terms of the RGB or HSB color depending on the + * current colorMode() (the default color space is + * RGB, with each value in the range from 0 to 255). + * The alpha range by default is also 0 to 255. If a + * single string argument is provided, RGB, RGBA and + * Hex CSS color strings and all named color strings + * are supported. In this case, an alpha number value + * as a second argument is not supported, the RGBA + * form should be used. + * + * + * A p5 Color object can also be provided to set the + * stroke color. + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + * @chainable + */ + stroke(values: number[]): p5 + + /** + * Sets the color used to draw lines and borders + * around shapes. This color is either specified in + * terms of the RGB or HSB color depending on the + * current colorMode() (the default color space is + * RGB, with each value in the range from 0 to 255). + * The alpha range by default is also 0 to 255. If a + * single string argument is provided, RGB, RGBA and + * Hex CSS color strings and all named color strings + * are supported. In this case, an alpha number value + * as a second argument is not supported, the RGBA + * form should be used. + * + * + * A p5 Color object can also be provided to set the + * stroke color. + * + * @param color the stroke color + * @chainable + */ + stroke(color: p5.Color): p5 + + /** + * Draw an arc to the screen. If called with only x, + * y, w, h, start, and stop, the arc will be drawn + * and filled as an open pie segment. If a mode + * parameter is provided, the arc will be filled like + * an open semi-circle (OPEN) , a closed semi-circle + * (CHORD), or as a closed pie segment (PIE). The + * origin may be changed with the ellipseMode() + * function. Note that drawing a full circle (ex: 0 + * to TWO_PI) will appear blank because 0 and TWO_PI + * are the same position on the unit circle. The best + * way to handle this is by using the ellipse() + * function instead to create a closed ellipse, and + * to use the arc() function only to draw parts of an + * ellipse. + * + * @param x x-coordinate of the arc's ellipse + * @param y y-coordinate of the arc's ellipse + * @param w width of the arc's ellipse by default + * @param h height of the arc's ellipse by default + * @param start angle to start the arc, specified in + * radians + * @param stop angle to stop the arc, specified in + * radians + * @param [mode] optional parameter to determine the + * way of drawing the arc. either CHORD, PIE or OPEN + * @chainable + */ + arc(x: number, y: number, w: number, h: number, start: number, stop: number, mode?: ARC_MODE): p5 + + /** + * Draws an ellipse (oval) to the screen. An ellipse + * with equal width and height is a circle. By + * default, the first two parameters set the + * location, and the third and fourth parameters set + * the shape's width and height. If no height is + * specified, the value of width is used for both the + * width and height. If a negative height or width is + * specified, the absolute value is taken. The origin + * may be changed with the ellipseMode() function. + * + * @param x x-coordinate of the ellipse. + * @param y y-coordinate of the ellipse. + * @param w width of the ellipse. + * @param [h] height of the ellipse. + * @chainable + */ + ellipse(x: number, y: number, w: number, h?: number): p5 + + /** + * Draws an ellipse (oval) to the screen. An ellipse + * with equal width and height is a circle. By + * default, the first two parameters set the + * location, and the third and fourth parameters set + * the shape's width and height. If no height is + * specified, the value of width is used for both the + * width and height. If a negative height or width is + * specified, the absolute value is taken. The origin + * may be changed with the ellipseMode() function. + * + * @param x x-coordinate of the ellipse. + * @param y y-coordinate of the ellipse. + * @param w width of the ellipse. + * @param h height of the ellipse. + * @param detail number of radial sectors to draw + */ + ellipse(x: number, y: number, w: number, h: number, detail: number): void + + /** + * Draws a line (a direct path between two points) to + * the screen. The version of line() with four + * parameters draws the line in 2D. To color a line, + * use the stroke() function. A line cannot be + * filled, therefore the fill() function will not + * affect the color of a line. 2D lines are drawn + * with a width of one pixel by default, but this can + * be changed with the strokeWeight() function. + * + * @param x1 the x-coordinate of the first point + * @param y1 the y-coordinate of the first point + * @param x2 the x-coordinate of the second point + * @param y2 the y-coordinate of the second point + * @chainable + */ + line(x1: number, y1: number, x2: number, y2: number): p5 + + /** + * Draws a line (a direct path between two points) to + * the screen. The version of line() with four + * parameters draws the line in 2D. To color a line, + * use the stroke() function. A line cannot be + * filled, therefore the fill() function will not + * affect the color of a line. 2D lines are drawn + * with a width of one pixel by default, but this can + * be changed with the strokeWeight() function. + * + * @param x1 the x-coordinate of the first point + * @param y1 the y-coordinate of the first point + * @param z1 the z-coordinate of the first point + * @param x2 the x-coordinate of the second point + * @param y2 the y-coordinate of the second point + * @param z2 the z-coordinate of the second point + * @chainable + */ + line(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): p5 + + /** + * Draws a point, a coordinate in space at the + * dimension of one pixel. The first parameter is the + * horizontal value for the point, the second value + * is the vertical value for the point. The color of + * the point is determined by the current stroke. + * + * @param x the x-coordinate + * @param y the y-coordinate + * @param [z] the z-coordinate (for WEBGL mode) + * @chainable + */ + point(x: number, y: number, z?: number): p5 + + /** + * Draw a quad. A quad is a quadrilateral, a four + * sided polygon. It is similar to a rectangle, but + * the angles between its edges are not constrained + * to ninety degrees. The first pair of parameters + * (x1,y1) sets the first vertex and the subsequent + * pairs should proceed clockwise or + * counter-clockwise around the defined shape. + * + * @param x1 the x-coordinate of the first point + * @param y1 the y-coordinate of the first point + * @param x2 the x-coordinate of the second point + * @param y2 the y-coordinate of the second point + * @param x3 the x-coordinate of the third point + * @param y3 the y-coordinate of the third point + * @param x4 the x-coordinate of the fourth point + * @param y4 the y-coordinate of the fourth point + * @chainable + */ + quad(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): p5 + + /** + * Draw a quad. A quad is a quadrilateral, a four + * sided polygon. It is similar to a rectangle, but + * the angles between its edges are not constrained + * to ninety degrees. The first pair of parameters + * (x1,y1) sets the first vertex and the subsequent + * pairs should proceed clockwise or + * counter-clockwise around the defined shape. + * + * @param x1 the x-coordinate of the first point + * @param y1 the y-coordinate of the first point + * @param x2 the x-coordinate of the second point + * @param y2 the y-coordinate of the second point + * @param x3 the x-coordinate of the third point + * @param y3 the y-coordinate of the third point + * @param x4 the x-coordinate of the fourth point + * @param y4 the y-coordinate of the fourth point + * @chainable + */ + quad(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, x3: number, y3: number, z3: number, x4: number, y4: number, z4: number): p5 + + /** + * Draws a rectangle to the screen. A rectangle is a + * four-sided shape with every angle at ninety + * degrees. By default, the first two parameters set + * the location of the upper-left corner, the third + * sets the width, and the fourth sets the height. + * The way these parameters are interpreted, however, + * may be changed with the rectMode() function. The + * fifth, sixth, seventh and eighth parameters, if + * specified, determine corner radius for the + * top-right, top-left, lower-right and lower-left + * corners, respectively. An omitted corner radius + * parameter is set to the value of the previously + * specified radius value in the parameter list. + * + * @param x x-coordinate of the rectangle. + * @param y y-coordinate of the rectangle. + * @param w width of the rectangle. + * @param h height of the rectangle. + * @param [tl] optional radius of top-left corner. + * @param [tr] optional radius of top-right corner. + * @param [br] optional radius of bottom-right + * corner. + * @param [bl] optional radius of bottom-left corner. + * @chainable + */ + rect(x: number, y: number, w: number, h: number, tl?: number, tr?: number, br?: number, bl?: number): p5 + + /** + * Draws a rectangle to the screen. A rectangle is a + * four-sided shape with every angle at ninety + * degrees. By default, the first two parameters set + * the location of the upper-left corner, the third + * sets the width, and the fourth sets the height. + * The way these parameters are interpreted, however, + * may be changed with the rectMode() function. The + * fifth, sixth, seventh and eighth parameters, if + * specified, determine corner radius for the + * top-right, top-left, lower-right and lower-left + * corners, respectively. An omitted corner radius + * parameter is set to the value of the previously + * specified radius value in the parameter list. + * + * @param x x-coordinate of the rectangle. + * @param y y-coordinate of the rectangle. + * @param w width of the rectangle. + * @param h height of the rectangle. + * @param [detailX] number of segments in the + * x-direction + * @param [detailY] number of segments in the + * y-direction + * @chainable + */ + rect(x: number, y: number, w: number, h: number, detailX?: number, detailY?: number): p5 + + /** + * A triangle is a plane created by connecting three + * points. The first two arguments specify the first + * point, the middle two arguments specify the second + * point, and the last two arguments specify the + * third point. + * + * @param x1 x-coordinate of the first point + * @param y1 y-coordinate of the first point + * @param x2 x-coordinate of the second point + * @param y2 y-coordinate of the second point + * @param x3 x-coordinate of the third point + * @param y3 y-coordinate of the third point + * @chainable + */ + triangle(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): p5 + + /** + * Modifies the location from which ellipses are + * drawn by changing the way in which parameters + * given to ellipse() are interpreted. The default + * mode is ellipseMode(CENTER), which interprets the + * first two parameters of ellipse() as the shape's + * center point, while the third and fourth + * parameters are its width and height. + * + * + * ellipseMode(RADIUS) also uses the first two + * parameters of ellipse() as the shape's center + * point, but uses the third and fourth parameters to + * specify half of the shapes's width and height. + * + * + * ellipseMode(CORNER) interprets the first two + * parameters of ellipse() as the upper-left corner + * of the shape, while the third and fourth + * parameters are its width and height. + * + * + * ellipseMode(CORNERS) interprets the first two + * parameters of ellipse() as the location of one + * corner of the ellipse's bounding box, and the + * third and fourth parameters as the location of the + * opposite corner. + * + * + * The parameter must be written in ALL CAPS because + * Javascript is a case-sensitive language. + * + * @param mode either CENTER, RADIUS, CORNER, or + * CORNERS + * @chainable + */ + ellipseMode(mode: ELLIPSE_MODE): p5 + + /** + * Draws all geometry with jagged (aliased) edges. + * Note that smooth() is active by default, so it is + * necessary to call noSmooth() to disable smoothing + * of geometry, images, and fonts. + * + * @chainable + */ + noSmooth(): p5 + + /** + * Modifies the location from which rectangles are + * drawn by changing the way in which parameters + * given to rect() are interpreted. The default mode + * is rectMode(CORNER), which interprets the first + * two parameters of rect() as the upper-left corner + * of the shape, while the third and fourth + * parameters are its width and height. + * + * + * rectMode(CORNERS) interprets the first two + * parameters of rect() as the location of one + * corner, and the third and fourth parameters as the + * location of the opposite corner. + * + * + * rectMode(CENTER) interprets the first two + * parameters of rect() as the shape's center point, + * while the third and fourth parameters are its + * width and height. + * + * + * rectMode(RADIUS) also uses the first two + * parameters of rect() as the shape's center point, + * but uses the third and fourth parameters to + * specify half of the shapes's width and height. + * + * + * The parameter must be written in ALL CAPS because + * Javascript is a case-sensitive language. + * + * @param mode either CORNER, CORNERS, CENTER, or + * RADIUS + * @chainable + */ + rectMode(mode: RECT_MODE): p5 + + /** + * Draws all geometry with smooth (anti-aliased) + * edges. smooth() will also improve image quality of + * resized images. Note that smooth() is active by + * default; noSmooth() can be used to disable + * smoothing of geometry, images, and fonts. + * + * @chainable + */ + smooth(): p5 + + // src/core/rendering.js + + /** + * Sets the style for rendering line endings. These + * ends are either squared, extended, or rounded, + * each of which specified with the corresponding + * parameters: SQUARE, PROJECT, and ROUND. The + * default cap is ROUND. + * + * @param cap either SQUARE, PROJECT, or ROUND + * @chainable + */ + strokeCap(cap: STROKE_CAP): p5 + + /** + * Sets the style of the joints which connect line + * segments. These joints are either mitered, + * beveled, or rounded and specified with the + * corresponding parameters MITER, BEVEL, and ROUND. + * The default joint is MITER. + * + * @param join either MITER, BEVEL, ROUND + * @chainable + */ + strokeJoin(join: STROKE_JOIN): p5 + + /** + * Sets the width of the stroke used for lines, + * points, and the border around shapes. All widths + * are set in units of pixels. + * + * @param weight the weight (in pixels) of the stroke + * @chainable + */ + strokeWeight(weight: number): p5 + + /** + * Called directly before setup(), the preload() + * function is used to handle asynchronous loading of + * external files. If a preload function is defined, + * setup() will wait until any load calls within have + * finished. Nothing besides load calls should be + * inside preload (loadImage, loadJSON, loadFont, + * loadStrings, etc). + * + * + * By default the text "loading..." will be + * displayed. To make your own loading page, include + * an HTML element with id "p5_loading" in your page. + * More information here. + * + */ + preload(): void + + /** + * The setup() function is called once when the + * program starts. It's used to define initial + * environment properties such as screen size and + * background color and to load media such as images + * and fonts as the program starts. There can only be + * one setup() function for each program and it + * shouldn't be called again after its initial + * execution. + * + * + * Note: Variables declared within setup() are not + * accessible within other functions, including + * draw(). + * + */ + setup(): void + + // src/core/structure.js + + /** + * Called directly after setup(), the draw() function + * continuously executes the lines of code contained + * inside its block until the program is stopped or + * noLoop() is called. Note if noLoop() is called in + * setup(), draw() will still be executed once before + * stopping. draw() is called automatically and + * should never be called explicitly. It should + * always be controlled with noLoop(), redraw() and + * loop(). After noLoop() stops the code in draw() + * from executing, redraw() causes the code inside + * draw() to execute once, and loop() will cause the + * code inside draw() to resume executing + * continuously. + * + * + * The number of times draw() executes in each second + * may be controlled with the frameRate() function. + * + * + * There can only be one draw() function for each + * sketch, and draw() must exist if you want the code + * to run continuously, or to process events such as + * mousePressed(). Sometimes, you might have an empty + * call to draw() in your program, as shown in the + * above example. + * + * + * It is important to note that the drawing + * coordinate system will be reset at the beginning + * of each draw() call. If any transformations are + * performed within draw() (ex: scale, rotate, + * translate), their effects will be undone at the + * beginning of draw(), so transformations will not + * accumulate over time. On the other hand, styling + * applied (ex: fill, stroke, etc) will remain in + * effect. + * + */ + draw(): void + + /** + * Removes the entire p5 sketch. This will remove the + * canvas and any elements created by p5.js. It will + * also stop the draw loop and unbind any properties + * or methods from the window global scope. It will + * leave a variable p5 in case you wanted to create a + * new p5 sketch. If you like, you can set p5 = null + * to erase it. While all functions and variables and + * objects created by the p5 library will be removed, + * any other global variables created by your code + * will remain. + * + */ + remove(): void + + /** + * Draws a cubic Bezier curve on the screen. These + * curves are defined by a series of anchor and + * control points. The first two parameters specify + * the first anchor point and the last two parameters + * specify the other anchor point, which become the + * first and last points on the curve. The middle + * parameters specify the two control points which + * define the shape of the curve. Approximately + * speaking, control points "pull" the curve towards + * them.Bezier curves were developed by French + * automotive engineer Pierre Bezier, and are + * commonly used in computer graphics to define + * gently sloping curves. See also curve(). + * + * @param x1 x-coordinate for the first anchor point + * @param y1 y-coordinate for the first anchor point + * @param x2 x-coordinate for the first control point + * @param y2 y-coordinate for the first control point + * @param x3 x-coordinate for the second control + * point + * @param y3 y-coordinate for the second control + * point + * @param x4 x-coordinate for the second anchor point + * @param y4 y-coordinate for the second anchor point + * @chainable + */ + bezier(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): p5 + + /** + * Draws a cubic Bezier curve on the screen. These + * curves are defined by a series of anchor and + * control points. The first two parameters specify + * the first anchor point and the last two parameters + * specify the other anchor point, which become the + * first and last points on the curve. The middle + * parameters specify the two control points which + * define the shape of the curve. Approximately + * speaking, control points "pull" the curve towards + * them.Bezier curves were developed by French + * automotive engineer Pierre Bezier, and are + * commonly used in computer graphics to define + * gently sloping curves. See also curve(). + * + * @param x1 x-coordinate for the first anchor point + * @param y1 y-coordinate for the first anchor point + * @param z1 z-coordinate for the first anchor point + * @param x2 x-coordinate for the first control point + * @param y2 y-coordinate for the first control point + * @param z2 z-coordinate for the first control point + * @param x3 x-coordinate for the second control + * point + * @param y3 y-coordinate for the second control + * point + * @param z3 z-coordinate for the second control + * point + * @param x4 x-coordinate for the second anchor point + * @param y4 y-coordinate for the second anchor point + * @param z4 z-coordinate for the second anchor point + * @chainable + */ + bezier(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, x3: number, y3: number, z3: number, x4: number, y4: number, z4: number): p5 + + /** + * Sets the resolution at which Beziers display. The + * default value is 20. + * + * @param detail resolution of the curves + * @chainable + */ + bezierDetail(detail: number): p5 + + // src/core/transform.js + + /** + * Evaluates the Bezier at position t for points a, + * b, c, d. The parameters a and d are the first and + * last points on the curve, and b and c are the + * control points. The final parameter t varies + * between 0 and 1. This can be done once with the x + * coordinates and a second time with the y + * coordinates to get the location of a bezier curve + * at t. + * + * @param a coordinate of first point on the curve + * @param b coordinate of first control point + * @param c coordinate of second control point + * @param d coordinate of second point on the curve + * @param t value between 0 and 1 + * @return the value of the Bezier at position t + */ + bezierPoint(a: number, b: number, c: number, d: number, t: number): number + + /** + * Evaluates the tangent to the Bezier at position t + * for points a, b, c, d. The parameters a and d are + * the first and last points on the curve, and b and + * c are the control points. The final parameter t + * varies between 0 and 1. + * + * @param a coordinate of first point on the curve + * @param b coordinate of first control point + * @param c coordinate of second control point + * @param d coordinate of second point on the curve + * @param t value between 0 and 1 + * @return the tangent at position t + */ + bezierTangent(a: number, b: number, c: number, d: number, t: number): number + + /** + * Draws a curved line on the screen between two + * points, given as the middle four parameters. The + * first two parameters are a control point, as if + * the curve came from this point even though it's + * not drawn. The last two parameters similarly + * describe the other control point. Longer curves + * can be created by putting a series of curve() + * functions together or using curveVertex(). An + * additional function called curveTightness() + * provides control for the visual quality of the + * curve. The curve() function is an implementation + * of Catmull-Rom splines. + * + * @param x1 x-coordinate for the beginning control + * point + * @param y1 y-coordinate for the beginning control + * point + * @param x2 x-coordinate for the first point + * @param y2 y-coordinate for the first point + * @param x3 x-coordinate for the second point + * @param y3 y-coordinate for the second point + * @param x4 x-coordinate for the ending control + * point + * @param y4 y-coordinate for the ending control + * point + * @chainable + */ + curve(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): p5 + + /** + * Draws a curved line on the screen between two + * points, given as the middle four parameters. The + * first two parameters are a control point, as if + * the curve came from this point even though it's + * not drawn. The last two parameters similarly + * describe the other control point. Longer curves + * can be created by putting a series of curve() + * functions together or using curveVertex(). An + * additional function called curveTightness() + * provides control for the visual quality of the + * curve. The curve() function is an implementation + * of Catmull-Rom splines. + * + * @param x1 x-coordinate for the beginning control + * point + * @param y1 y-coordinate for the beginning control + * point + * @param z1 z-coordinate for the beginning control + * point + * @param x2 x-coordinate for the first point + * @param y2 y-coordinate for the first point + * @param z2 z-coordinate for the first point + * @param x3 x-coordinate for the second point + * @param y3 y-coordinate for the second point + * @param z3 z-coordinate for the second point + * @param x4 x-coordinate for the ending control + * point + * @param y4 y-coordinate for the ending control + * point + * @param z4 z-coordinate for the ending control + * point + * @chainable + */ + curve(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, x3: number, y3: number, z3: number, x4: number, y4: number, z4: number): p5 + + /** + * Sets the resolution at which curves display. The + * default value is 20. + * + * @param resolution of the curves + * @chainable + */ + curveDetail(resolution: number): p5 + + /** + * Modifies the quality of forms created with curve() + * and curveVertex(). The parameter tightness + * determines how the curve fits to the vertex + * points. The value 0.0 is the default value for + * tightness (this value defines the curves to be + * Catmull-Rom splines) and the value 1.0 connects + * all the points with straight lines. Values within + * the range -5.0 and 5.0 will deform the curves but + * will leave them recognizable and as values + * increase in magnitude, they will continue to + * deform. + * + * @param amount of deformation from the original + * vertices + * @chainable + */ + curveTightness(amount: number): p5 + + /** + * Evaluates the curve at position t for points a, b, + * c, d. The parameter t varies between 0 and 1, a + * and d are points on the curve, and b and c are the + * control points. This can be done once with the x + * coordinates and a second time with the y + * coordinates to get the location of a curve at t. + * + * @param a coordinate of first point on the curve + * @param b coordinate of first control point + * @param c coordinate of second control point + * @param d coordinate of second point on the curve + * @param t value between 0 and 1 + * @return bezier value at position t + */ + curvePoint(a: number, b: number, c: number, d: number, t: number): number + + /** + * Evaluates the tangent to the curve at position t + * for points a, b, c, d. The parameter t varies + * between 0 and 1, a and d are points on the curve, + * and b and c are the control points. + * + * @param a coordinate of first point on the curve + * @param b coordinate of first control point + * @param c coordinate of second control point + * @param d coordinate of second point on the curve + * @param t value between 0 and 1 + * @return the tangent at position t + */ + curveTangent(a: number, b: number, c: number, d: number, t: number): number + + /** + * The print() function writes to the console area of + * your browser. This function is often helpful for + * looking at the data a program is producing. This + * function creates a new line of text for each call + * to the function. Individual elements can be + * separated with quotes ("") and joined with the + * addition operator (+). + * + * @param contents any combination of Number, String, + * Object, Boolean, Array to print + */ + print(contents: any): void + + /** + * Sets the cursor to a predefined symbol or an + * image, or makes it visible if already hidden. If + * you are trying to set an image as the cursor, the + * recommended size is 16x16 or 32x32 pixels. It is + * not possible to load an image as the cursor if you + * are exporting your program for the Web, and not + * all MODES work with all browsers. The values for + * parameters x and y must be less than the + * dimensions of the image. + * + * @param type either ARROW, CROSS, HAND, MOVE, TEXT, + * or WAIT, or path for image + * @param [x] the horizontal active spot of the + * cursor + * @param [y] the vertical active spot of the cursor + */ + cursor(type: string|any, x?: number, y?: number): void + + /** + * Specifies the number of frames to be displayed + * every second. For example, the function call + * frameRate(30) will attempt to refresh 30 times a + * second. If the processor is not fast enough to + * maintain the specified rate, the frame rate will + * not be achieved. Setting the frame rate within + * setup() is recommended. The default rate is 60 + * frames per second. This is the same as + * setFrameRate(val). Calling frameRate() with no + * arguments returns the current framerate. The draw + * function must run at least once before it will + * return a value. This is the same as + * getFrameRate(). + * + * + * Calling frameRate() with arguments that are not of + * the type numbers or are non positive also returns + * current framerate. + * + * @param fps number of frames to be displayed every + * second + * @chainable + */ + frameRate(fps: number): p5 + + /** + * Specifies the number of frames to be displayed + * every second. For example, the function call + * frameRate(30) will attempt to refresh 30 times a + * second. If the processor is not fast enough to + * maintain the specified rate, the frame rate will + * not be achieved. Setting the frame rate within + * setup() is recommended. The default rate is 60 + * frames per second. This is the same as + * setFrameRate(val). Calling frameRate() with no + * arguments returns the current framerate. The draw + * function must run at least once before it will + * return a value. This is the same as + * getFrameRate(). + * + * + * Calling frameRate() with arguments that are not of + * the type numbers or are non positive also returns + * current framerate. + * + * @return current frameRate + */ + frameRate(): number + + // src/core/vertex.js + + /** + * Hides the cursor from view. + * + */ + noCursor(): void + + /** + * The windowResized() function is called once every + * time the browser window is resized. This is a good + * place to resize the canvas or do any other + * adjustments to accommodate the new window size. + * + */ + windowResized(): void + + /** + * If argument is given, sets the sketch to + * fullscreen or not based on the value of the + * argument. If no argument is given, returns the + * current fullscreen state. Note that due to browser + * restrictions this can only be called on user + * input, for example, on mouse press like the + * example below. + * + * @param [val] whether the sketch should be in + * fullscreen mode or not + * @return current fullscreen state + */ + fullscreen(val?: boolean): boolean + + /** + * Sets the pixel scaling for high pixel density + * displays. By default pixel density is set to match + * display density, call pixelDensity(1) to turn this + * off. Calling pixelDensity() with no arguments + * returns the current pixel density of the sketch. + * + * @param [val] whether or how much the sketch should + * scale + * @return current pixel density of the sketch + */ + pixelDensity(val?: number): number + + /** + * Returns the pixel density of the current display + * the sketch is running on. + * + * @return current pixel density of the display + */ + displayDensity(): number + + /** + * Gets the current URL. + * + * @return url + */ + getURL(): string + + /** + * Gets the current URL path as an array. + * + * @return path components + */ + getURLPath(): string[] + + /** + * Gets the current URL params as an Object. + * + * @return URL params + */ + getURLParams(): object + + /** + * Creates a canvas element in the document, and sets + * the dimensions of it in pixels. This method should + * be called only once at the start of setup. Calling + * createCanvas more than once in a sketch will + * result in very unpredictable behavior. If you want + * more than one drawing canvas you could use + * createGraphics (hidden by default but it can be + * shown). The system variables width and height are + * set by the parameters passed to this function. If + * createCanvas() is not used, the window will be + * given a default size of 100x100 pixels. + * + * + * For more ways to position the canvas, see the + * positioning the canvas wiki page. + * + * @param w width of the canvas + * @param h height of the canvas + * @param [renderer] either P2D or WEBGL + * @return canvas generated + */ + createCanvas(w: number, h: number, renderer?: RENDERER): p5.Renderer + + // src/data/p5.TypedDict.js + + /** + * Resizes the canvas to given width and height. The + * canvas will be cleared and draw will be called + * immediately, allowing the sketch to re-render + * itself in the resized canvas. + * + * @param w width of the canvas + * @param h height of the canvas + * @param [noRedraw] don't redraw the canvas + * immediately + */ + resizeCanvas(w: number, h: number, noRedraw?: boolean): void + + /** + * Removes the default canvas for a p5 sketch that + * doesn't require a canvas + * + */ + noCanvas(): void + + // src/events/acceleration.js + + /** + * Creates and returns a new p5.Renderer object. Use + * this class if you need to draw into an off-screen + * graphics buffer. The two parameters define the + * width and height in pixels. + * + * @param w width of the offscreen graphics buffer + * @param h height of the offscreen graphics buffer + * @param [renderer] either P2D or WEBGL undefined + * defaults to p2d + * @return offscreen graphics buffer + */ + createGraphics(w: number, h: number, renderer?: RENDERER): p5.Graphics + + /** + * Blends the pixels in the display window according + * to the defined mode. There is a choice of the + * following modes to blend the source pixels (A) + * with the ones of pixels already in the display + * window (B): - BLEND - linear interpolation of + * colours: C = A*factor + B. This is the default + * blending mode. + * - ADD - sum of A and B + * - DARKEST - only the darkest colour succeeds: C = + * min(A*factor, B). + * - LIGHTEST - only the lightest colour succeeds: C + * = max(A*factor, B). + * - DIFFERENCE - subtract colors from underlying + * image. + * - EXCLUSION - similar to DIFFERENCE, but less + * extreme. + * - MULTIPLY - multiply the colors, result will + * always be darker. + * - SCREEN - opposite multiply, uses inverse values + * of the colors. + * - REPLACE - the pixels entirely replace the others + * and don't utilize alpha (transparency) values. + * - OVERLAY - mix of MULTIPLY and SCREEN . + * Multiplies dark values, and screens light values. + * - HARD_LIGHT - SCREEN when greater than 50% gray, + * MULTIPLY when lower. + * - SOFT_LIGHT - mix of DARKEST and LIGHTEST. Works + * like OVERLAY, but not as harsh. + * - DODGE - lightens light tones and increases + * contrast, ignores darks. + * - BURN - darker areas are applied, increasing + * contrast, ignores lights. + * + * @param mode blend mode to set for canvas. either + * BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, + * EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, + * SOFT_LIGHT, DODGE, BURN, ADD or NORMAL + */ + blendMode(mode: BLEND_MODE): void + + /** + * Stops p5.js from continuously executing the code + * within draw(). If loop() is called, the code in + * draw() begins to run continuously again. If using + * noLoop() in setup(), it should be the last line + * inside the block. When noLoop() is used, it's not + * possible to manipulate or access the screen inside + * event handling functions such as mousePressed() or + * keyPressed(). Instead, use those functions to call + * redraw() or loop(), which will run draw(), which + * can update the screen properly. This means that + * when noLoop() has been called, no drawing can + * happen, and functions like saveFrame() or + * loadPixels() may not be used. + * + * + * Note that if the sketch is resized, redraw() will + * be called to update the sketch, even after + * noLoop() has been specified. Otherwise, the sketch + * would enter an odd state until loop() was called. + * + */ + noLoop(): void + + /** + * By default, p5.js loops through draw() + * continuously, executing the code within it. + * However, the draw() loop may be stopped by calling + * noLoop(). In that case, the draw() loop can be + * resumed with loop(). + * + */ + loop(): void + + /** + * The push() function saves the current drawing + * style settings and transformations, while pop() + * restores these settings. Note that these functions + * are always used together. They allow you to change + * the style and transformation settings and later + * return to what you had. When a new state is + * started with push(), it builds on the current + * style and transform information. The push() and + * pop() functions can be embedded to provide more + * control. (See the second example for a + * demonstration.) push() stores information related + * to the current transformation state and style + * settings controlled by the following functions: + * fill(), stroke(), tint(), strokeWeight(), + * strokeCap(), strokeJoin(), imageMode(), + * rectMode(), ellipseMode(), colorMode(), + * textAlign(), textFont(), textMode(), textSize(), + * textLeading(). + * + */ + push(): void + + /** + * The push() function saves the current drawing + * style settings and transformations, while pop() + * restores these settings. Note that these functions + * are always used together. They allow you to change + * the style and transformation settings and later + * return to what you had. When a new state is + * started with push(), it builds on the current + * style and transform information. The push() and + * pop() functions can be embedded to provide more + * control. (See the second example for a + * demonstration.) push() stores information related + * to the current transformation state and style + * settings controlled by the following functions: + * fill(), stroke(), tint(), strokeWeight(), + * strokeCap(), strokeJoin(), imageMode(), + * rectMode(), ellipseMode(), colorMode(), + * textAlign(), textFont(), textMode(), textSize(), + * textLeading(). + * + */ + pop(): void + + /** + * Executes the code within draw() one time. This + * functions allows the program to update the display + * window only when necessary, for example when an + * event registered by mousePressed() or keyPressed() + * occurs. In structuring a program, it only makes + * sense to call redraw() within events such as + * mousePressed(). This is because redraw() does not + * run draw() immediately (it only sets a flag that + * indicates an update is needed). + * + * + * The redraw() function does not work properly when + * called inside draw(). To enable/disable + * animations, use loop() and noLoop(). + * + * + * In addition you can set the number of redraws per + * method call. Just add an integer as single + * parameter for the number of redraws. + * + * @param [n] Redraw for n-times. The default value + * is 1. + */ + redraw(n?: number): void + + /** + * Multiplies the current matrix by the one specified + * through the parameters. This is a powerful + * operation that can perform the equivalent of + * translate, scale, shear and rotate all at once. + * You can learn more about transformation matrices + * on Wikipedia. The naming of the arguments here + * follows the naming of the WHATWG specification + * and corresponds to a transformation matrix of the + * form: + * + * @param a numbers which define the 2x3 matrix to be + * multiplied + * @param b numbers which define the 2x3 matrix to be + * multiplied + * @param c numbers which define the 2x3 matrix to be + * multiplied + * @param d numbers which define the 2x3 matrix to be + * multiplied + * @param e numbers which define the 2x3 matrix to be + * multiplied + * @param f numbers which define the 2x3 matrix to be + * multiplied + * @chainable + */ + applyMatrix(a: number, b: number, c: number, d: number, e: number, f: number): p5 + + /** + * Replaces the current matrix with the identity + * matrix. + * + * @chainable + */ + resetMatrix(): p5 + + /** + * Rotates a shape the amount specified by the angle + * parameter. This function accounts for angleMode, + * so angles can be entered in either RADIANS or + * DEGREES. Objects are always rotated around their + * relative position to the origin and positive + * numbers rotate objects in a clockwise direction. + * Transformations apply to everything that happens + * after and subsequent calls to the function + * accumulates the effect. For example, calling + * rotate(HALF_PI) and then rotate(HALF_PI) is the + * same as rotate(PI). All tranformations are reset + * when draw() begins again. + * + * + * Technically, rotate() multiplies the current + * transformation matrix by a rotation matrix. This + * function can be further controlled by the push() + * and pop(). + * + * @param angle the angle of rotation, specified in + * radians or degrees, depending on current angleMode + * @param [axis] (in 3d) the axis to rotate around + * @chainable + */ + rotate(angle: number, axis?: p5.Vector|number[]): p5 + + /** + * Rotates around X axis. + * + * @param angle the angle of rotation, specified in + * radians or degrees, depending on current angleMode + * @chainable + */ + rotateX(angle: number): p5 + + /** + * Rotates around Y axis. + * + * @param angle the angle of rotation, specified in + * radians or degrees, depending on current angleMode + * @chainable + */ + rotateY(angle: number): p5 + + /** + * Rotates around Z axis. Webgl mode only. + * + * @param angle the angle of rotation, specified in + * radians or degrees, depending on current angleMode + * @chainable + */ + rotateZ(angle: number): p5 + + /** + * Increases or decreases the size of a shape by + * expanding and contracting vertices. Objects always + * scale from their relative origin to the coordinate + * system. Scale values are specified as decimal + * percentages. For example, the function call + * scale(2.0) increases the dimension of a shape by + * 200%. Transformations apply to everything that + * happens after and subsequent calls to the function + * multiply the effect. For example, calling + * scale(2.0) and then scale(1.5) is the same as + * scale(3.0). If scale() is called within draw(), + * the transformation is reset when the loop begins + * again. + * + * + * Using this function with the z parameter is only + * available in WEBGL mode. This function can be + * further controlled with push() and pop(). + * + * @param s percent to scale the object, or + * percentage to scale the object in the x-axis if + * multiple arguments are given + * @param [y] percent to scale the object in the + * y-axis + * @param [z] percent to scale the object in the + * z-axis (webgl only) + * @chainable + */ + scale(s: number|p5.Vector|number[], y?: number, z?: number): p5 + + /** + * Increases or decreases the size of a shape by + * expanding and contracting vertices. Objects always + * scale from their relative origin to the coordinate + * system. Scale values are specified as decimal + * percentages. For example, the function call + * scale(2.0) increases the dimension of a shape by + * 200%. Transformations apply to everything that + * happens after and subsequent calls to the function + * multiply the effect. For example, calling + * scale(2.0) and then scale(1.5) is the same as + * scale(3.0). If scale() is called within draw(), + * the transformation is reset when the loop begins + * again. + * + * + * Using this function with the z parameter is only + * available in WEBGL mode. This function can be + * further controlled with push() and pop(). + * + * @param scales per-axis percents to scale the + * object + * @chainable + */ + scale(scales: p5.Vector|number[]): p5 + + /** + * Shears a shape around the x-axis the amount + * specified by the angle parameter. Angles should be + * specified in the current angleMode. Objects are + * always sheared around their relative position to + * the origin and positive numbers shear objects in a + * clockwise direction. Transformations apply to + * everything that happens after and subsequent calls + * to the function accumulates the effect. For + * example, calling shearX(PI/2) and then + * shearX(PI/2) is the same as shearX(PI). If + * shearX() is called within the draw(), the + * transformation is reset when the loop begins + * again. + * + * + * Technically, shearX() multiplies the current + * transformation matrix by a rotation matrix. This + * function can be further controlled by the push() + * and pop() functions. + * + * @param angle angle of shear specified in radians + * or degrees, depending on current angleMode + * @chainable + */ + shearX(angle: number): p5 + + /** + * Shears a shape around the y-axis the amount + * specified by the angle parameter. Angles should be + * specified in the current angleMode. Objects are + * always sheared around their relative position to + * the origin and positive numbers shear objects in a + * clockwise direction. Transformations apply to + * everything that happens after and subsequent calls + * to the function accumulates the effect. For + * example, calling shearY(PI/2) and then + * shearY(PI/2) is the same as shearY(PI). If + * shearY() is called within the draw(), the + * transformation is reset when the loop begins + * again. + * + * + * Technically, shearY() multiplies the current + * transformation matrix by a rotation matrix. This + * function can be further controlled by the push() + * and pop() functions. + * + * @param angle angle of shear specified in radians + * or degrees, depending on current angleMode + * @chainable + */ + shearY(angle: number): p5 + + /** + * Specifies an amount to displace objects within the + * display window. The x parameter specifies + * left/right translation, the y parameter specifies + * up/down translation. Transformations are + * cumulative and apply to everything that happens + * after and subsequent calls to the function + * accumulates the effect. For example, calling + * translate(50, 0) and then translate(20, 0) is the + * same as translate(70, 0). If translate() is called + * within draw(), the transformation is reset when + * the loop begins again. This function can be + * further controlled by using push() and pop(). + * + * @param x left/right translation + * @param y up/down translation + * @param [z] forward/backward translation (webgl + * only) + * @chainable + */ + translate(x: number, y: number, z?: number): p5 + + /** + * Specifies an amount to displace objects within the + * display window. The x parameter specifies + * left/right translation, the y parameter specifies + * up/down translation. Transformations are + * cumulative and apply to everything that happens + * after and subsequent calls to the function + * accumulates the effect. For example, calling + * translate(50, 0) and then translate(20, 0) is the + * same as translate(70, 0). If translate() is called + * within draw(), the transformation is reset when + * the loop begins again. This function can be + * further controlled by using push() and pop(). + * + * @param vector the vector to translate by + * @chainable + */ + translate(vector: p5.Vector): p5 + + // src/events/keyboard.js + + /** + * Use the beginContour() and endContour() functions + * to create negative shapes within shapes such as + * the center of the letter 'O'. beginContour() + * begins recording vertices for the shape and + * endContour() stops recording. The vertices that + * define a negative shape must "wind" in the + * opposite direction from the exterior shape. First + * draw vertices for the exterior clockwise order, + * then for internal shapes, draw vertices shape in + * counter-clockwise. These functions can only be + * used within a beginShape()/endShape() pair and + * transformations such as translate(), rotate(), and + * scale() do not work within a + * beginContour()/endContour() pair. It is also not + * possible to use other shapes, such as ellipse() or + * rect() within. + * + * @chainable + */ + beginContour(): p5 + + /** + * Using the beginShape() and endShape() functions + * allow creating more complex forms. beginShape() + * begins recording vertices for a shape and + * endShape() stops recording. The value of the kind + * parameter tells it which types of shapes to create + * from the provided vertices. With no mode + * specified, the shape can be any irregular polygon. + * The parameters available for beginShape() are + * POINTS, LINES, TRIANGLES, TRIANGLE_FAN, + * TRIANGLE_STRIP, QUADS, and QUAD_STRIP. After + * calling the beginShape() function, a series of + * vertex() commands must follow. To stop drawing the + * shape, call endShape(). Each shape will be + * outlined with the current stroke color and filled + * with the fill color. + * + * + * Transformations such as translate(), rotate(), and + * scale() do not work within beginShape(). It is + * also not possible to use other shapes, such as + * ellipse() or rect() within beginShape(). + * + * @param [kind] either POINTS, LINES, TRIANGLES, + * TRIANGLE_FAN TRIANGLE_STRIP, QUADS, or QUAD_STRIP + * @chainable + */ + beginShape(kind?: BEGIN_KIND): p5 + + /** + * Specifies vertex coordinates for Bezier curves. + * Each call to bezierVertex() defines the position + * of two control points and one anchor point of a + * Bezier curve, adding a new segment to a line or + * shape. The first time bezierVertex() is used + * within a beginShape() call, it must be prefaced + * with a call to vertex() to set the first anchor + * point. This function must be used between + * beginShape() and endShape() and only when there is + * no MODE parameter specified to beginShape(). + * + * @param x2 x-coordinate for the first control point + * @param y2 y-coordinate for the first control point + * @param x3 x-coordinate for the second control + * point + * @param y3 y-coordinate for the second control + * point + * @param x4 x-coordinate for the anchor point + * @param y4 y-coordinate for the anchor point + * @chainable + */ + bezierVertex(x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): p5 + + /** + * Specifies vertex coordinates for curves. This + * function may only be used between beginShape() and + * endShape() and only when there is no MODE + * parameter specified to beginShape(). The first + * and last points in a series of curveVertex() lines + * will be used to guide the beginning and end of a + * the curve. A minimum of four points is required to + * draw a tiny curve between the second and third + * points. Adding a fifth point with curveVertex() + * will draw the curve between the second, third, and + * fourth points. The curveVertex() function is an + * implementation of Catmull-Rom splines. + * + * @param x x-coordinate of the vertex + * @param y y-coordinate of the vertex + * @chainable + */ + curveVertex(x: number, y: number): p5 + + /** + * Use the beginContour() and endContour() functions + * to create negative shapes within shapes such as + * the center of the letter 'O'. beginContour() + * begins recording vertices for the shape and + * endContour() stops recording. The vertices that + * define a negative shape must "wind" in the + * opposite direction from the exterior shape. First + * draw vertices for the exterior clockwise order, + * then for internal shapes, draw vertices shape in + * counter-clockwise. These functions can only be + * used within a beginShape()/endShape() pair and + * transformations such as translate(), rotate(), and + * scale() do not work within a + * beginContour()/endContour() pair. It is also not + * possible to use other shapes, such as ellipse() or + * rect() within. + * + * @chainable + */ + endContour(): p5 + + /** + * The endShape() function is the companion to + * beginShape() and may only be called after + * beginShape(). When endshape() is called, all of + * image data defined since the previous call to + * beginShape() is written into the image buffer. The + * constant CLOSE as the value for the MODE parameter + * to close the shape (to connect the beginning and + * the end). + * + * @param [mode] use CLOSE to close the shape + * @chainable + */ + endShape(mode?: END_MODE): p5 + + /** + * Specifies vertex coordinates for quadratic Bezier + * curves. Each call to quadraticVertex() defines the + * position of one control points and one anchor + * point of a Bezier curve, adding a new segment to a + * line or shape. The first time quadraticVertex() is + * used within a beginShape() call, it must be + * prefaced with a call to vertex() to set the first + * anchor point. This function must be used between + * beginShape() and endShape() and only when there is + * no MODE parameter specified to beginShape(). + * + * @param cx x-coordinate for the control point + * @param cy y-coordinate for the control point + * @param x3 x-coordinate for the anchor point + * @param y3 y-coordinate for the anchor point + * @chainable + */ + quadraticVertex(cx: number, cy: number, x3: number, y3: number): p5 + + // src/events/mouse.js + + /** + * All shapes are constructed by connecting a series + * of vertices. vertex() is used to specify the + * vertex coordinates for points, lines, triangles, + * quads, and polygons. It is used exclusively within + * the beginShape() and endShape() functions. + * + * @param x x-coordinate of the vertex + * @param y y-coordinate of the vertex + * @chainable + */ + vertex(x: number, y: number): p5 + + /** + * All shapes are constructed by connecting a series + * of vertices. vertex() is used to specify the + * vertex coordinates for points, lines, triangles, + * quads, and polygons. It is used exclusively within + * the beginShape() and endShape() functions. + * + * @param x x-coordinate of the vertex + * @param y y-coordinate of the vertex + * @param [z] z-coordinate of the vertex + * @param [u] the vertex's texture u-coordinate + * @param [v] the vertex's texture v-coordinate + */ + vertex(x: number, y: number, z?: number, u?: number, v?: number): void + + /** + * Creates a new instance of p5.StringDict using the + * key, value pair or object you provide. + * + * @param key or object + */ + createStringDict(key: string|object, value: string): p5.StringDict + + /** + * Creates a new instance of p5.NumberDict using the + * key, value pair or object you provide. + * + * @param key or object + */ + createNumberDict(key: number|object, value: number): p5.NumberDict + + /** + * The setMoveThreshold() function is used to set the + * movement threshold for the deviceMoved() function. + * The default threshold is set to 0.5. + * + * @param value The threshold value + */ + setMoveThreshold(value: number): void + + /** + * The setShakeThreshold() function is used to set + * the movement threshold for the deviceShaken() + * function. The default threshold is set to 30. + * + * @param value The threshold value + */ + setShakeThreshold(value: number): void + + /** + * The deviceMoved() function is called when the + * device is moved by more than the threshold value + * along X, Y or Z axis. The default threshold is set + * to 0.5. + * + */ + deviceMoved(): void + + /** + * The deviceTurned() function is called when the + * device rotates by more than 90 degrees + * continuously. The axis that triggers the + * deviceTurned() method is stored in the turnAxis + * variable. The deviceTurned() method can be locked + * to trigger on any axis: X, Y or Z by comparing the + * turnAxis variable to 'X', 'Y' or 'Z'. + * + */ + deviceTurned(): void + + /** + * The deviceShaken() function is called when the + * device total acceleration changes of accelerationX + * and accelerationY values is more than the + * threshold value. The default threshold is set to + * 30. + * + */ + deviceShaken(): void + + /** + * The keyPressed() function is called once every + * time a key is pressed. The keyCode for the key + * that was pressed is stored in the keyCode + * variable. For non-ASCII keys, use the keyCode + * variable. You can check if the keyCode equals + * BACKSPACE, DELETE, ENTER, RETURN, TAB, ESCAPE, + * SHIFT, CONTROL, OPTION, ALT, UP_ARROW, DOWN_ARROW, + * LEFT_ARROW, RIGHT_ARROW. + * + * + * For ASCII keys that was pressed is stored in the + * key variable. However, it does not distinguish + * between uppercase and lowercase. For this reason, + * it is recommended to use keyTyped() to read the + * key variable, in which the case of the variable + * will be distinguished. + * + * + * Because of how operating systems handle key + * repeats, holding down a key may cause multiple + * calls to keyTyped() (and keyReleased() as well). + * The rate of repeat is set by the operating system + * and how each computer is configured. + * + * + * Browsers may have different default behaviors + * attached to various key events. To prevent any + * default behavior for this event, add "return + * false" to the end of the method. + * + */ + keyPressed(): void + + /** + * The keyReleased() function is called once every + * time a key is released. See key and keyCode for + * more information. Browsers may have different + * default behaviors attached to various key events. + * To prevent any default behavior for this event, + * add "return false" to the end of the method. + * + */ + keyReleased(): void + + /** + * The keyTyped() function is called once every time + * a key is pressed, but action keys such as Ctrl, + * Shift, and Alt are ignored. The most recent key + * pressed will be stored in the key variable. + * Because of how operating systems handle key + * repeats, holding down a key will cause multiple + * calls to keyTyped() (and keyReleased() as well). + * The rate of repeat is set by the operating system + * and how each computer is configured. + * + * + * Browsers may have different default behaviors + * attached to various key events. To prevent any + * default behavior for this event, add "return + * false" to the end of the method. + * + */ + keyTyped(): void + + /** + * The keyIsDown() function checks if the key is + * currently down, i.e. pressed. It can be used if + * you have an object that moves, and you want + * several keys to be able to affect its behaviour + * simultaneously, such as moving a sprite + * diagonally. You can put in any number representing + * the keyCode of the key, or use any of the variable + * keyCode names listed here. + * + * @param code The key to check for. + * @return whether key is down or not + */ + keyIsDown(code: number): boolean + + /** + * The mouseMoved() function is called every time the + * mouse moves and a mouse button is not pressed. + * Browsers may have different default behaviors + * attached to various mouse events. To prevent any + * default behavior for this event, add "return + * false" to the end of the method. + * + */ + mouseMoved(): void + + /** + * The mouseDragged() function is called once every + * time the mouse moves and a mouse button is + * pressed. If no mouseDragged() function is defined, + * the touchMoved() function will be called instead + * if it is defined. Browsers may have different + * default behaviors attached to various mouse + * events. To prevent any default behavior for this + * event, add "return false" to the end of the + * method. + * + */ + mouseDragged(): void + + /** + * The mousePressed() function is called once after + * every time a mouse button is pressed. The + * mouseButton variable (see the related reference + * entry) can be used to determine which button has + * been pressed. If no mousePressed() function is + * defined, the touchStarted() function will be + * called instead if it is defined. Browsers may have + * different default behaviors attached to various + * mouse events. To prevent any default behavior for + * this event, add "return false" to the end of the + * method. + * + */ + mousePressed(): void + + /** + * The mouseReleased() function is called every time + * a mouse button is released. If no mouseReleased() + * function is defined, the touchEnded() function + * will be called instead if it is defined. Browsers + * may have different default behaviors attached to + * various mouse events. To prevent any default + * behavior for this event, add "return false" to the + * end of the method. + * + */ + mouseReleased(event?: MouseEvent): void + + // src/events/touch.js + + /** + * The mouseClicked() function is called once after a + * mouse button has been pressed and then released. + * Browsers handle clicks differently, so this + * function is only guaranteed to be run when the + * left mouse button is clicked. To handle other + * mouse buttons being pressed or released, see + * mousePressed() or mouseReleased(). + * + * + * Browsers may have different default behaviors + * attached to various mouse events. To prevent any + * default behavior for this event, add "return + * false" to the end of the method. + * + */ + mouseClicked(): void + + /** + * The doubleClicked() function is executed every + * time a event listener has detected a dblclick + * event which is a part of the DOM L3 specification. + * The doubleClicked event is fired when a pointing + * device button (usually a mouse's primary button) + * is clicked twice on a single element. For more + * info on the dblclick event refer to mozilla's + * documentation here: + * https://developer.mozilla.org/en-US/docs/Web/Events/dblclick + * + */ + doubleClicked(): void + + /** + * The function mouseWheel() is executed every time a + * vertical mouse wheel event is detected either + * triggered by an actual mouse wheel or by a + * touchpad. The event.delta property returns the + * amount the mouse wheel have scrolled. The values + * can be positive or negative depending on the + * scroll direction (on OS X with "natural" scrolling + * enabled, the signs are inverted). + * + * + * Browsers may have different default behaviors + * attached to various mouse events. To prevent any + * default behavior for this event, add "return + * false" to the end of the method. + * + * + * Due to the current support of the "wheel" event on + * Safari, the function may only work as expected if + * "return false" is included while using Safari. + * + */ + mouseWheel(): void + + /** + * The touchStarted() function is called once after + * every time a touch is registered. If no + * touchStarted() function is defined, the + * mousePressed() function will be called instead if + * it is defined. Browsers may have different default + * behaviors attached to various touch events. To + * prevent any default behavior for this event, add + * "return false" to the end of the method. + * + */ + touchStarted(): void + + // src/image/image.js + + /** + * The touchMoved() function is called every time a + * touch move is registered. If no touchMoved() + * function is defined, the mouseDragged() function + * will be called instead if it is defined. Browsers + * may have different default behaviors attached to + * various touch events. To prevent any default + * behavior for this event, add "return false" to the + * end of the method. + * + */ + touchMoved(): void + + /** + * The touchEnded() function is called every time a + * touch ends. If no touchEnded() function is + * defined, the mouseReleased() function will be + * called instead if it is defined. Browsers may have + * different default behaviors attached to various + * touch events. To prevent any default behavior for + * this event, add "return false" to the end of the + * method. + * + */ + touchEnded(): void + + /** + * Creates a new p5.Image (the datatype for storing + * images). This provides a fresh buffer of pixels to + * play with. Set the size of the buffer with the + * width and height parameters. .pixels gives access + * to an array containing the values for all the + * pixels in the display window. These values are + * numbers. This array is the size (including an + * appropriate factor for the pixelDensity) of the + * display window x4, representing the R, G, B, A + * values in order for each pixel, moving from left + * to right across each row, then down each column. + * See .pixels for more info. It may also be simpler + * to use set() or get(). + * + * + * Before accessing the pixels of an image, the data + * must loaded with the loadPixels() function. After + * the array data has been modified, the + * updatePixels() function must be run to update the + * changes. + * + * @param width width in pixels + * @param height height in pixels + * @return the p5.Image object + */ + createImage(width: number, height: number): p5.Image + + /** + * Save the current canvas as an image. In Safari, + * this will open the image in the window and the + * user must provide their own filename on save-as. + * Other browsers will either save the file + * immediately, or prompt the user with a dialogue + * window. + * + * @param selectedCanvas a variable representing a + * specific html5 canvas (optional) + * @param [extension] 'jpg' or 'png' + */ + saveCanvas(selectedCanvas: p5.Element|HTMLCanvasElement, filename?: string, extension?: string): void + + // src/image/loading_displaying.js + + /** + * Save the current canvas as an image. In Safari, + * this will open the image in the window and the + * user must provide their own filename on save-as. + * Other browsers will either save the file + * immediately, or prompt the user with a dialogue + * window. + * + * @param [extension] 'jpg' or 'png' + */ + saveCanvas(filename?: string, extension?: string): void + + /** + * Capture a sequence of frames that can be used to + * create a movie. Accepts a callback. For example, + * you may wish to send the frames to a server where + * they can be stored or converted into a movie. If + * no callback is provided, the browser will pop up + * save dialogues in an attempt to download all of + * the images that have just been created. With the + * callback provided the image data isn't saved by + * default but instead passed as an argument to the + * callback function as an array of objects, with the + * size of array equal to the total number of frames. + * Note that saveFrames() will only save the first 15 + * frames of an animation. To export longer + * animations, you might look into a library like + * ccapture.js. + * + * @param extension 'jpg' or 'png' + * @param duration Duration in seconds to save the + * frames for. + * @param framerate Framerate to save the frames in. + * @param [callback] A callback function that will be + * executed to handle the image data. This function + * should accept an array as argument. The array will + * contain the specified number of frames of objects. + * Each object has three properties: imageData - an + * image/octet-stream, filename and extension. + */ + saveFrames(filename: string, extension: string, duration: number, framerate: number, callback?: (p1: any[]) => any): void + + /** + * Loads an image from a path and creates a p5.Image + * from it. The image may not be immediately + * available for rendering If you want to ensure that + * the image is ready before doing anything with it, + * place the loadImage() call in preload(). You may + * also supply a callback function to handle the + * image when it's ready. + * + * + * The path to the image should be relative to the + * HTML file that links in your sketch. Loading an + * image from a URL or other remote location may be + * blocked due to your browser's built-in security. + * + * @param path Path of the image to be loaded + * @param [successCallback] Function to be called + * once the image is loaded. Will be passed the + * p5.Image. + * @param [failureCallback] called with event error + * if the image fails to load. + * @return the p5.Image object + */ + loadImage(path: string, successCallback?: (p1: p5.Image) => any, failureCallback?: (p1: Event) => any): p5.Image + + /** + * Draw an image to the p5.js canvas. This function + * can be used with different numbers of parameters. + * The simplest use requires only three parameters: + * img, x, and y—where (x, y) is the position of the + * image. Two more parameters can optionally be added + * to specify the width and height of the image. + * + * This function can also be used with all eight + * Number parameters. To differentiate between all + * these parameters, p5.js uses the language of + * "destination rectangle" (which corresponds to + * "dx", "dy", etc.) and "source image" (which + * corresponds to "sx", "sy", etc.) below. Specifying + * the "source image" dimensions can be useful when + * you want to display a subsection of the source + * image instead of the whole thing. Here's a diagram + * to explain further: + * + * @param img the image to display + * @param x the x-coordinate of the top-left corner + * of the image + * @param y the y-coordinate of the top-left corner + * of the image + * @param [width] the width to draw the image + * @param [height] the height to draw the image + */ + image(img: p5.Image|p5.Element|p5.Graphics, x: number, y: number, width?: number, height?: number): void + + /** + * Draw an image to the p5.js canvas. This function + * can be used with different numbers of parameters. + * The simplest use requires only three parameters: + * img, x, and y—where (x, y) is the position of the + * image. Two more parameters can optionally be added + * to specify the width and height of the image. + * + * This function can also be used with all eight + * Number parameters. To differentiate between all + * these parameters, p5.js uses the language of + * "destination rectangle" (which corresponds to + * "dx", "dy", etc.) and "source image" (which + * corresponds to "sx", "sy", etc.) below. Specifying + * the "source image" dimensions can be useful when + * you want to display a subsection of the source + * image instead of the whole thing. Here's a diagram + * to explain further: + * + * @param img the image to display + * @param dx the x-coordinate of the destination + * rectangle in which to draw the source image + * @param dy the y-coordinate of the destination + * rectangle in which to draw the source image + * @param dWidth the width of the destination + * rectangle + * @param dHeight the height of the destination + * rectangle + * @param sx the x-coordinate of the subsection of + * the source image to draw into the destination + * rectangle + * @param sy the y-coordinate of the subsection of + * the source image to draw into the destination + * rectangle + * @param [sWidth] the width of the subsection of the + * source image to draw into the destination + * rectangle + * @param [sHeight] the height of the subsection of + * the source image to draw into the destination + * rectangle + */ + image(img: p5.Image|p5.Element, dx: number, dy: number, dWidth: number, dHeight: number, sx: number, sy: number, sWidth?: number, sHeight?: number): void + + /** + * Sets the fill value for displaying images. Images + * can be tinted to specified colors or made + * transparent by including an alpha value. To apply + * transparency to an image without affecting its + * color, use white as the tint color and specify an + * alpha value. For instance, tint(255, 128) will + * make an image 50% transparent (assuming the + * default alpha range of 0-255, which can be changed + * with colorMode()). + * + * + * The value for the gray parameter must be less than + * or equal to the current maximum value as specified + * by colorMode(). The default maximum value is 255. + * + * @param v1 red or hue value relative to the current + * color range + * @param v2 green or saturation value relative to + * the current color range + * @param v3 blue or brightness value relative to the + * current color range + */ + tint(v1: number, v2: number, v3: number, alpha?: number): void + + /** + * Sets the fill value for displaying images. Images + * can be tinted to specified colors or made + * transparent by including an alpha value. To apply + * transparency to an image without affecting its + * color, use white as the tint color and specify an + * alpha value. For instance, tint(255, 128) will + * make an image 50% transparent (assuming the + * default alpha range of 0-255, which can be changed + * with colorMode()). + * + * + * The value for the gray parameter must be less than + * or equal to the current maximum value as specified + * by colorMode(). The default maximum value is 255. + * + * @param value a color string + */ + tint(value: string, alpha?: number): void + + /** + * Sets the fill value for displaying images. Images + * can be tinted to specified colors or made + * transparent by including an alpha value. To apply + * transparency to an image without affecting its + * color, use white as the tint color and specify an + * alpha value. For instance, tint(255, 128) will + * make an image 50% transparent (assuming the + * default alpha range of 0-255, which can be changed + * with colorMode()). + * + * + * The value for the gray parameter must be less than + * or equal to the current maximum value as specified + * by colorMode(). The default maximum value is 255. + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + */ + tint(values: number[]): void + + /** + * Sets the fill value for displaying images. Images + * can be tinted to specified colors or made + * transparent by including an alpha value. To apply + * transparency to an image without affecting its + * color, use white as the tint color and specify an + * alpha value. For instance, tint(255, 128) will + * make an image 50% transparent (assuming the + * default alpha range of 0-255, which can be changed + * with colorMode()). + * + * + * The value for the gray parameter must be less than + * or equal to the current maximum value as specified + * by colorMode(). The default maximum value is 255. + * + * @param color the tint color + */ + tint(color: p5.Color): void + + // src/image/pixels.js + + /** + * Removes the current fill value for displaying + * images and reverts to displaying images with their + * original hues. + * + */ + noTint(): void + + /** + * Set image mode. Modifies the location from which + * images are drawn by changing the way in which + * parameters given to image() are interpreted. The + * default mode is imageMode(CORNER), which + * interprets the second and third parameters of + * image() as the upper-left corner of the image. If + * two additional parameters are specified, they are + * used to set the image's width and height. + * imageMode(CORNERS) interprets the second and third + * parameters of image() as the location of one + * corner, and the fourth and fifth parameters as the + * opposite corner. + * + * + * imageMode(CENTER) interprets the second and third + * parameters of image() as the image's center point. + * If two additional parameters are specified, they + * are used to set the image's width and height. + * + * @param mode either CORNER, CORNERS, or CENTER + */ + imageMode(mode: IMAGE_MODE): void + + /** + * Copies a region of pixels from one image to + * another, using a specified blend mode to do the + * operation. + * + * @param srcImage source image + * @param sx X coordinate of the source's upper left + * corner + * @param sy Y coordinate of the source's upper left + * corner + * @param sw source image width + * @param sh source image height + * @param dx X coordinate of the destination's upper + * left corner + * @param dy Y coordinate of the destination's upper + * left corner + * @param dw destination image width + * @param dh destination image height + * @param blendMode the blend mode. either BLEND, + * DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, + * EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, + * SOFT_LIGHT, DODGE, BURN, ADD or NORMAL. + */ + blend(srcImage: p5.Image, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number, blendMode: BLEND_MODE): void + + /** + * Copies a region of pixels from one image to + * another, using a specified blend mode to do the + * operation. + * + * @param sx X coordinate of the source's upper left + * corner + * @param sy Y coordinate of the source's upper left + * corner + * @param sw source image width + * @param sh source image height + * @param dx X coordinate of the destination's upper + * left corner + * @param dy Y coordinate of the destination's upper + * left corner + * @param dw destination image width + * @param dh destination image height + * @param blendMode the blend mode. either BLEND, + * DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, + * EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, + * SOFT_LIGHT, DODGE, BURN, ADD or NORMAL. + */ + blend(sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number, blendMode: any): void + + /** + * Copies a region of the canvas to another region of + * the canvas and copies a region of pixels from an + * image used as the srcImg parameter into the canvas + * srcImage is specified this is used as the source. + * If the source and destination regions aren't the + * same size, it will automatically resize source + * pixels to fit the specified target region. + * + * @param srcImage source image + * @param sx X coordinate of the source's upper left + * corner + * @param sy Y coordinate of the source's upper left + * corner + * @param sw source image width + * @param sh source image height + * @param dx X coordinate of the destination's upper + * left corner + * @param dy Y coordinate of the destination's upper + * left corner + * @param dw destination image width + * @param dh destination image height + */ + copy(srcImage: p5.Image|p5.Element, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void + + /** + * Copies a region of the canvas to another region of + * the canvas and copies a region of pixels from an + * image used as the srcImg parameter into the canvas + * srcImage is specified this is used as the source. + * If the source and destination regions aren't the + * same size, it will automatically resize source + * pixels to fit the specified target region. + * + * @param sx X coordinate of the source's upper left + * corner + * @param sy Y coordinate of the source's upper left + * corner + * @param sw source image width + * @param sh source image height + * @param dx X coordinate of the destination's upper + * left corner + * @param dy Y coordinate of the destination's upper + * left corner + * @param dw destination image width + * @param dh destination image height + */ + copy(sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void + + /** + * Applies a filter to the canvas. + * + * The presets options are: + * + * + * + * THRESHOLD Converts the image to black and white + * pixels depending if they are above or below the + * threshold defined by the level parameter. The + * parameter must be between 0.0 (black) and 1.0 + * (white). If no level is specified, 0.5 is used. + * + * + * + * GRAY Converts any colors in the image to grayscale + * equivalents. No parameter is used. + * + * + * + * OPAQUE Sets the alpha channel to entirely opaque. + * No parameter is used. + * + * + * + * INVERT Sets each pixel to its inverse value. No + * parameter is used. + * + * + * + * POSTERIZE Limits each channel of the image to the + * number of colors specified as the parameter. The + * parameter can be set to values between 2 and 255, + * but results are most noticeable in the lower + * ranges. + * + * + * + * BLUR Executes a Gaussian blur with the level + * parameter specifying the extent of the blurring. + * If no parameter is used, the blur is equivalent to + * Gaussian blur of radius 1. Larger values increase + * the blur. + * + * + * + * ERODE Reduces the light areas. No parameter is + * used. + * + * + * + * DILATE Increases the light areas. No parameter is + * used. + * + * @param filterType either THRESHOLD, GRAY, OPAQUE, + * INVERT, POSTERIZE, BLUR, ERODE, DILATE or BLUR. + * See Filters.js for docs on each available filter + * @param [filterParam] an optional parameter unique + * to each filter, see above + */ + filter(filterType: FILTER_TYPE, filterParam?: number): void + + /** + * Returns an array of [R,G,B,A] values for any pixel + * or grabs a section of an image. If no parameters + * are specified, the entire image is returned. Use + * the x and y parameters to get the value of one + * pixel. Get a section of the display window by + * specifying additional w and h parameters. When + * getting an image, the x and y parameters define + * the coordinates for the upper-left corner of the + * image, regardless of the current imageMode(). If + * the pixel requested is outside of the image + * window, [0,0,0,255] is returned. To get the + * numbers scaled according to the current color + * ranges and taking into account colorMode, use + * getColor instead of get. + * + * + * Getting the color of a single pixel with get(x, y) + * is easy, but not as fast as grabbing the data + * directly from pixels[]. The equivalent statement + * to get(x, y) using pixels[] with pixel density d + * is var x, y, d; // set these to the coordinates + * var off = (y width + x) d * 4; var components = + * [ pixels[off], pixels[off + 1], pixels[off + 2], + * pixels[off + 3] ]; print(components); + * + * + * See the reference for pixels[] for more + * information. + * + * @param [x] x-coordinate of the pixel + * @param [y] y-coordinate of the pixel + * @param [w] width + * @param [h] height + * @return values of pixel at x,y in array format [R, + * G, B, A] or p5.Image + */ + get(x?: number, y?: number, w?: number, h?: number): p5.Image|number[] + + /** + * Loads the pixel data for the display window into + * the pixels[] array. This function must always be + * called before reading from or writing to pixels[]. + * Note that only changes made with set() or direct + * manipulation of pixels[] will occur. + * + */ + loadPixels(): void + + /** + * Changes the color of any pixel, or writes an image + * directly to the display window. The x and y + * parameters specify the pixel to change and the c + * parameter specifies the color value. This can be a + * p5.Color object, or [R, G, B, A] pixel array. It + * can also be a single grayscale value. When setting + * an image, the x and y parameters define the + * coordinates for the upper-left corner of the + * image, regardless of the current imageMode(). + * + * + * After using set(), you must call updatePixels() + * for your changes to appear. This should be called + * once all pixels have been set, and must be called + * before calling .get() or drawing the image. + * + * Setting the color of a single pixel with set(x, y) + * is easy, but not as fast as putting the data + * directly into pixels[]. Setting the pixels[] + * values directly may be complicated when working + * with a retina display, but will perform better + * when lots of pixels need to be set directly on + * every loop. + * + * See the reference for pixels[] for more + * information. + * + * @param x x-coordinate of the pixel + * @param y y-coordinate of the pixel + * @param c insert a grayscale value | a pixel array + * | a p5.Color object | a p5.Image to copy + */ + set(x: number, y: number, c: number|number[]|object): void + + // src/io/files.js + + /** + * Updates the display window with the data in the + * pixels[] array. Use in conjunction with + * loadPixels(). If you're only reading pixels from + * the array, there's no need to call updatePixels() + * — updating is only necessary to apply changes. + * updatePixels() should be called anytime the pixels + * array is manipulated or set() is called, and only + * changes made with set() or direct changes to + * pixels[] will occur. + * + * @param [x] x-coordinate of the upper-left corner + * of region to update + * @param [y] y-coordinate of the upper-left corner + * of region to update + * @param [w] width of region to update + * @param [h] height of region to update + */ + updatePixels(x?: number, y?: number, w?: number, h?: number): void + + /** + * Loads a JSON file from a file or a URL, and + * returns an Object. Note that even if the JSON file + * contains an Array, an Object will be returned with + * index numbers as keys. This method is + * asynchronous, meaning it may not finish before the + * next line in your sketch is executed. JSONP is + * supported via a polyfill and you can pass in as + * the second argument an object with definitions of + * the json callback following the syntax specified + * here. + * + * @param path name of the file or url to load + * @param [jsonpOptions] options object for jsonp + * related settings + * @param [datatype] "json" or "jsonp" + * @param [callback] function to be executed after + * loadJSON() completes, data is passed in as first + * argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + * @return JSON data + */ + loadJSON(path: string, jsonpOptions?: object, datatype?: string, callback?: Function, errorCallback?: Function): object|any[] + + /** + * Reads the contents of a file and creates a String + * array of its individual lines. If the name of the + * file is used as the parameter, as in the above + * example, the file must be located in the sketch + * directory/folder. Alternatively, the file maybe + * be loaded from anywhere on the local computer + * using an absolute path (something that starts with + * / on Unix and Linux, or a drive letter on + * Windows), or the filename parameter can be a URL + * for a file found on a network. + * + * + * This method is asynchronous, meaning it may not + * finish before the next line in your sketch is + * executed. + * + * @param filename name of the file or url to load + * @param [callback] function to be executed after + * loadStrings() completes, Array is passed in as + * first argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + * @return Array of Strings + */ + loadStrings(filename: string, callback?: Function, errorCallback?: Function): string[] + + /** + * Reads the contents of a file or URL and creates a + * p5.Table object with its values. If a file is + * specified, it must be located in the sketch's + * "data" folder. The filename parameter can also be + * a URL to a file found online. By default, the file + * is assumed to be comma-separated (in CSV format). + * Table only looks for a header row if the 'header' + * option is included. Possible options include: + * + * - csv - parse the table as comma-separated values + * - tsv - parse the table as tab-separated values + * - header - this table has a header (title) row + * + * When passing in multiple options, pass them in as + * separate parameters, seperated by commas. For + * example: + * + * + * loadTable('my_csv_file.csv', 'csv', 'header'); + * + * + * All files loaded and saved use UTF-8 encoding. + * + * This method is asynchronous, meaning it may not + * finish before the next line in your sketch is + * executed. Calling loadTable() inside preload() + * guarantees to complete the operation before + * setup() and draw() are called. + * + * Outside of preload(), you may supply a callback + * function to handle the object: + * + * @param filename name of the file or URL to load + * @param options "header" "csv" "tsv" + * @param [callback] function to be executed after + * loadTable() completes. On success, the Table + * object is passed in as the first argument. + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + * @return Table object containing data + */ + loadTable(filename: string, options: string, callback?: Function, errorCallback?: Function): object + + /** + * Reads the contents of a file or URL and creates a + * p5.Table object with its values. If a file is + * specified, it must be located in the sketch's + * "data" folder. The filename parameter can also be + * a URL to a file found online. By default, the file + * is assumed to be comma-separated (in CSV format). + * Table only looks for a header row if the 'header' + * option is included. Possible options include: + * + * - csv - parse the table as comma-separated values + * - tsv - parse the table as tab-separated values + * - header - this table has a header (title) row + * + * When passing in multiple options, pass them in as + * separate parameters, seperated by commas. For + * example: + * + * + * loadTable('my_csv_file.csv', 'csv', 'header'); + * + * + * All files loaded and saved use UTF-8 encoding. + * + * This method is asynchronous, meaning it may not + * finish before the next line in your sketch is + * executed. Calling loadTable() inside preload() + * guarantees to complete the operation before + * setup() and draw() are called. + * + * Outside of preload(), you may supply a callback + * function to handle the object: + * + * @param filename name of the file or URL to load + * @param [callback] function to be executed after + * loadTable() completes. On success, the Table + * object is passed in as the first argument. + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + */ + loadTable(filename: string, callback?: Function, errorCallback?: Function): object + + /** + * Reads the contents of a file and creates an XML + * object with its values. If the name of the file is + * used as the parameter, as in the above example, + * the file must be located in the sketch + * directory/folder. Alternatively, the file maybe be + * loaded from anywhere on the local computer using + * an absolute path (something that starts with / on + * Unix and Linux, or a drive letter on Windows), or + * the filename parameter can be a URL for a file + * found on a network. + * + * This method is asynchronous, meaning it may not + * finish before the next line in your sketch is + * executed. Calling loadXML() inside preload() + * guarantees to complete the operation before + * setup() and draw() are called. + * + * Outside of preload(), you may supply a callback + * function to handle the object. + * + * @param filename name of the file or URL to load + * @param [callback] function to be executed after + * loadXML() completes, XML object is passed in as + * first argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + * @return XML object containing data + */ + loadXML(filename: string, callback?: Function, errorCallback?: Function): object + + /** + * Method for executing an HTTP GET request. If data + * type is not specified, p5 will try to guess based + * on the URL, defaulting to text. This is equivalent + * to calling httpDo(path, 'GET'). + * + * @param path name of the file or url to load + * @param [datatype] "json", "jsonp", "xml", or + * "text" + * @param [data] param data passed sent with request + * @param [callback] function to be executed after + * httpGet() completes, data is passed in as first + * argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + */ + httpGet(path: string, datatype?: string, data?: object, callback?: Function, errorCallback?: Function): Promise + + /** + * Method for executing an HTTP POST request. If data + * type is not specified, p5 will try to guess based + * on the URL, defaulting to text. This is equivalent + * to calling httpDo(path, 'POST'). + * + * @param path name of the file or url to load + * @param [datatype] "json", "jsonp", "xml", or + * "text". If omitted, httpPost() will guess. + * @param [data] param data passed sent with request + * @param [callback] function to be executed after + * httpPost() completes, data is passed in as first + * argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + */ + httpPost(path: string, datatype?: string, data?: object, callback?: Function, errorCallback?: Function): void + + /** + * Method for executing an HTTP request. If data type + * is not specified, p5 will try to guess based on + * the URL, defaulting to text. For more advanced + * use, you may also pass in the path as the first + * argument and a object as the second argument, the + * signature follows the one specified in the Fetch + * API specification. + * + * @param path name of the file or url to load + * @param [method] either "GET", "POST", or "PUT", + * defaults to "GET" + * @param [datatype] "json", "jsonp", "xml", or + * "text" + * @param [data] param data passed sent with request + * @param [callback] function to be executed after + * httpGet() completes, data is passed in as first + * argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + */ + httpDo(path: string, method?: string, datatype?: string, data?: object, callback?: Function, errorCallback?: Function): void + + /** + * Method for executing an HTTP request. If data type + * is not specified, p5 will try to guess based on + * the URL, defaulting to text. For more advanced + * use, you may also pass in the path as the first + * argument and a object as the second argument, the + * signature follows the one specified in the Fetch + * API specification. + * + * @param path name of the file or url to load + * @param options Request object options as + * documented in the "fetch" API reference + * @param [callback] function to be executed after + * httpGet() completes, data is passed in as first + * argument + * @param [errorCallback] function to be executed if + * there is an error, response is passed in as first + * argument + */ + httpDo(path: string, options: object, callback?: Function, errorCallback?: Function): void + + createWriter(name: string, extension?: string): p5.PrintWriter + + /** + * Save an image, text, json, csv, wav, or html. + * Prompts download to the client's computer. Note + * that it is not recommended to call save() within + * draw if it's looping, as the save() function will + * open a new save dialog every frame. The default + * behavior is to save the canvas as an image. You + * can optionally specify a filename. For example: + * + * + * save(); save('myCanvas.jpg'); // save a specific + * canvas with a filename + * + * Alternately, the first parameter can be a pointer + * to a canvas p5.Element, an Array of Strings, an + * Array of JSON, a JSON object, a p5.Table, a + * p5.Image, or a p5.SoundFile (requires p5.sound). + * The second parameter is a filename (including + * extension). The third parameter is for options + * specific to this type of object. This method will + * save a file that fits the given paramaters. For + * example: + * + * + * // Saves canvas as an image save('myCanvas.jpg'); + * // Saves pImage as a png image var img = + * createImage(10, 10); save(img, 'my.png'); // Saves + * canvas as an image var cnv = createCanvas(100, + * 100); save(cnv, 'myCanvas.jpg'); // Saves + * p5.Renderer object as an image var gb = + * createGraphics(100, 100); save(gb, + * 'myGraphics.jpg'); var myTable = new p5.Table(); + * // Saves table as html file save(myTable, + * 'myTable.html'); // Comma Separated Values + * save(myTable, 'myTable.csv'); // Tab Separated + * Values save(myTable, 'myTable.tsv'); var myJSON = + * { a: 1, b: true }; // Saves pretty JSON + * save(myJSON, 'my.json'); // Optimizes JSON + * filesize save(myJSON, 'my.json', true); // Saves + * array of strings to a text file with line breaks + * after each item var arrayOfStrings = ['a', 'b']; + * save(arrayOfStrings, 'my.txt'); + * + * @param [objectOrFilename] If filename is provided, + * will save canvas as an image with either png or + * jpg extension depending on the filename. If object + * is provided, will save depending on the object and + * filename (see examples above). + * @param [filename] If an object is provided as the + * first parameter, then the second parameter + * indicates the filename, and should include an + * appropriate file extension (see examples above). + * @param [options] Additional options depend on + * filetype. For example, when saving JSON, true + * indicates that the output will be optimized for + * filesize, rather than readability. + */ + save(objectOrFilename?: object|string, filename?: string, options?: boolean|string): void + + /** + * Writes the contents of an Array or a JSON object + * to a .json file. The file saving process and + * location of the saved file will vary between web + * browsers. + * + * @param [optimize] If true, removes line breaks and + * spaces from the output file to optimize filesize + * (but not readability). + */ + saveJSON(json: any[]|object, filename: string, optimize?: boolean): void + + /** + * Writes an array of Strings to a text file, one + * line per String. The file saving process and + * location of the saved file will vary between web + * browsers. + * + * @param list string array to be written + * @param filename filename for output + * @param [extension] the filename's extension + */ + saveStrings(list: string[], filename: string, extension?: string): void + + // src/math/calculation.js + + /** + * Writes the contents of a Table object to a file. + * Defaults to a text file with + * comma-separated-values ('csv') but can also use + * tab separation ('tsv'), or generate an HTML table + * ('html'). The file saving process and location of + * the saved file will vary between web browsers. + * + * @param Table the Table object to save to a file + * @param filename the filename to which the Table + * should be saved + * @param [options] can be one of "tsv", "csv", or + * "html" + */ + saveTable(Table: p5.Table, filename: string, options?: string): void + + /** + * Calculates the absolute value (magnitude) of a + * number. Maps to Math.abs(). The absolute value of + * a number is always positive. + * + * @param n number to compute + * @return absolute value of given number + */ + abs(n: number): number + + /** + * Calculates the closest int value that is greater + * than or equal to the value of the parameter. Maps + * to Math.ceil(). For example, ceil(9.03) returns + * the value 10. + * + * @param n number to round up + * @return rounded up number + */ + ceil(n: number): number + + /** + * Constrains a value between a minimum and maximum + * value. + * + * @param n number to constrain + * @param low minimum limit + * @param high maximum limit + * @return constrained number + */ + constrain(n: number, low: number, high: number): number + + /** + * Calculates the distance between two points. + * + * @param x1 x-coordinate of the first point + * @param y1 y-coordinate of the first point + * @param x2 x-coordinate of the second point + * @param y2 y-coordinate of the second point + * @return distance between the two points + */ + dist(x1: number, y1: number, x2: number, y2: number): number + + /** + * Calculates the distance between two points. + * + * @param x1 x-coordinate of the first point + * @param y1 y-coordinate of the first point + * @param z1 z-coordinate of the first point + * @param x2 x-coordinate of the second point + * @param y2 y-coordinate of the second point + * @param z2 z-coordinate of the second point + * @return distance between the two points + */ + dist(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): number + + /** + * Returns Euler's number e (2.71828...) raised to + * the power of the n parameter. Maps to Math.exp(). + * + * @param n exponent to raise + * @return e^n + */ + exp(n: number): number + + /** + * Calculates the closest int value that is less than + * or equal to the value of the parameter. Maps to + * Math.floor(). + * + * @param n number to round down + * @return rounded down number + */ + floor(n: number): number + + /** + * Calculates a number between two numbers at a + * specific increment. The amt parameter is the + * amount to interpolate between the two values where + * 0.0 equal to the first point, 0.1 is very near the + * first point, 0.5 is half-way in between, etc. The + * lerp function is convenient for creating motion + * along a straight path and for drawing dotted + * lines. + * + * @param start first value + * @param stop second value + * @param amt number between 0.0 and 1.0 + * @return lerped value + */ + lerp(start: number, stop: number, amt: number): number + + /** + * Calculates the natural logarithm (the base-e + * logarithm) of a number. This function expects the + * n parameter to be a value greater than 0.0. Maps + * to Math.log(). + * + * @param n number greater than 0 + * @return natural logarithm of n + */ + log(n: number): number + + /** + * Calculates the magnitude (or length) of a vector. + * A vector is a direction in space commonly used in + * computer graphics and linear algebra. Because it + * has no "start" position, the magnitude of a vector + * can be thought of as the distance from the + * coordinate 0,0 to its x,y value. Therefore, mag() + * is a shortcut for writing dist(0, 0, x, y). + * + * @param a first value + * @param b second value + * @return magnitude of vector from (0,0) to (a,b) + */ + mag(a: number, b: number): number + + /** + * Re-maps a number from one range to another. In + * the first example above, the number 25 is + * converted from a value in the range of 0 to 100 + * into a value that ranges from the left edge of the + * window (0) to the right edge (width). + * + * @param value the incoming value to be converted + * @param start1 lower bound of the value's current + * range + * @param stop1 upper bound of the value's current + * range + * @param start2 lower bound of the value's target + * range + * @param stop2 upper bound of the value's target + * range + * @param [withinBounds] constrain the value to the + * newly mapped range + * @return remapped number + */ + map(value: number, start1: number, stop1: number, start2: number, stop2: number, withinBounds?: boolean): number + + /** + * Determines the largest value in a sequence of + * numbers, and then returns that value. max() + * accepts any number of Number parameters, or an + * Array of any length. + * + * @param n0 Number to compare + * @param n1 Number to compare + * @return maximum Number + */ + max(n0: number, n1: number): number + + /** + * Determines the largest value in a sequence of + * numbers, and then returns that value. max() + * accepts any number of Number parameters, or an + * Array of any length. + * + * @param nums Numbers to compare + */ + max(nums: number[]): number + + /** + * Determines the smallest value in a sequence of + * numbers, and then returns that value. min() + * accepts any number of Number parameters, or an + * Array of any length. + * + * @param n0 Number to compare + * @param n1 Number to compare + * @return minimum Number + */ + min(n0: number, n1: number): number + + /** + * Determines the smallest value in a sequence of + * numbers, and then returns that value. min() + * accepts any number of Number parameters, or an + * Array of any length. + * + * @param nums Numbers to compare + */ + min(nums: number[]): number + + /** + * Normalizes a number from another range into a + * value between 0 and 1. Identical to map(value, + * low, high, 0, 1). Numbers outside of the range are + * not clamped to 0 and 1, because out-of-range + * values are often intentional and useful. (See the + * second example above.) + * + * @param value incoming value to be normalized + * @param start lower bound of the value's current + * range + * @param stop upper bound of the value's current + * range + * @return normalized number + */ + norm(value: number, start: number, stop: number): number + + /** + * Facilitates exponential expressions. The pow() + * function is an efficient way of multiplying + * numbers by themselves (or their reciprocals) in + * large quantities. For example, pow(3, 5) is + * equivalent to the expression 33333 and pow(3, -5) + * is equivalent to 1 / 33333. Maps to Math.pow(). + * + * @param n base of the exponential expression + * @param e power by which to raise the base + * @return n^e + */ + pow(n: number, e: number): number + + /** + * Calculates the integer closest to the n parameter. + * For example, round(133.8) returns the value 134. + * Maps to Math.round(). + * + * @param n number to round + * @return rounded number + */ + round(n: number): number + + /** + * Squares a number (multiplies a number by itself). + * The result is always a positive number, as + * multiplying two negative numbers always yields a + * positive result. For example, -1 * -1 = 1. + * + * @param n number to square + * @return squared number + */ + sq(n: number): number + + // src/math/math.js + + /** + * Calculates the square root of a number. The square + * root of a number is always positive, even though + * there may be a valid negative root. The square + * root s of number a is such that s*s = a. It is the + * opposite of squaring. Maps to Math.sqrt(). + * + * @param n non-negative number to square root + * @return square root of number + */ + sqrt(n: number): number + + // src/math/noise.js + + /** + * Creates a new p5.Vector (the datatype for storing + * vectors). This provides a two or three dimensional + * vector, specifically a Euclidean (also known as + * geometric) vector. A vector is an entity that has + * both magnitude and direction. + * + * @param [x] x component of the vector + * @param [y] y component of the vector + * @param [z] z component of the vector + */ + createVector(x?: number, y?: number, z?: number): p5.Vector + + /** + * Returns the Perlin noise value at specified + * coordinates. Perlin noise is a random sequence + * generator producing a more natural ordered, + * harmonic succession of numbers compared to the + * standard random() function. It was invented by Ken + * Perlin in the 1980s and been used since in + * graphical applications to produce procedural + * textures, natural motion, shapes, terrains etc. + * The main difference to the random() function is + * that Perlin noise is defined in an infinite + * n-dimensional space where each pair of coordinates + * corresponds to a fixed semi-random value (fixed + * only for the lifespan of the program; see the + * noiseSeed() function). p5.js can compute 1D, 2D + * and 3D noise, depending on the number of + * coordinates given. The resulting value will always + * be between 0.0 and 1.0. The noise value can be + * animated by moving through the noise space as + * demonstrated in the example above. The 2nd and 3rd + * dimension can also be interpreted as time. + * + * The actual noise is structured similar to an audio + * signal, in respect to the function's use of + * frequencies. Similar to the concept of harmonics + * in physics, perlin noise is computed over several + * octaves which are added together for the final + * result. + * + * Another way to adjust the character of the + * resulting sequence is the scale of the input + * coordinates. As the function works within an + * infinite space the value of the coordinates + * doesn't matter as such, only the distance between + * successive coordinates does (eg. when using + * noise() within a loop). As a general rule the + * smaller the difference between coordinates, the + * smoother the resulting noise sequence will be. + * Steps of 0.005-0.03 work best for most + * applications, but this will differ depending on + * use. + * + * @param x x-coordinate in noise space + * @param [y] y-coordinate in noise space + * @param [z] z-coordinate in noise space + * @return Perlin noise value (between 0 and 1) at + * specified coordinates + */ + noise(x: number, y?: number, z?: number): number + + /** + * Adjusts the character and level of detail produced + * by the Perlin noise function. Similar to harmonics + * in physics, noise is computed over several + * octaves. Lower octaves contribute more to the + * output signal and as such define the overall + * intensity of the noise, whereas higher octaves + * create finer grained details in the noise + * sequence. By default, noise is computed over 4 + * octaves with each octave contributing exactly half + * than its predecessor, starting at 50% strength for + * the 1st octave. This falloff amount can be changed + * by adding an additional function parameter. Eg. a + * falloff factor of 0.75 means each octave will now + * have 75% impact (25% less) of the previous lower + * octave. Any value between 0.0 and 1.0 is valid, + * however note that values greater than 0.5 might + * result in greater than 1.0 values returned by + * noise(). + * + * + * By changing these parameters, the signal created + * by the noise() function can be adapted to fit very + * specific needs and characteristics. + * + * @param lod number of octaves to be used by the + * noise + * @param falloff falloff factor for each octave + */ + noiseDetail(lod: number, falloff: number): void + + // src/math/random.js + + /** + * Sets the seed value for noise(). By default, + * noise() produces different results each time the + * program is run. Set the value parameter to a + * constant to return the same pseudo-random numbers + * each time the software is run. + * + * @param seed the seed value + */ + noiseSeed(seed: number): void + + /** + * Sets the seed value for random(). By default, + * random() produces different results each time the + * program is run. Set the seed parameter to a + * constant to return the same pseudo-random numbers + * each time the software is run. + * + * @param seed the seed value + */ + randomSeed(seed: number): void + + /** + * Return a random floating-point number. Takes + * either 0, 1 or 2 arguments. + * + * If no argument is given, returns a random number + * from 0 up to (but not including) 1. + * + * If one argument is given and it is a number, + * returns a random number from 0 up to (but not + * including) the number. + * + * If one argument is given and it is an array, + * returns a random element from that array. + * + * If two arguments are given, returns a random + * number from the first argument up to (but not + * including) the second argument. + * + * @param [min] the lower bound (inclusive) + * @param [max] the upper bound (exclusive) + * @return the random number + */ + random(min?: number, max?: number): number + + /** + * Return a random floating-point number. Takes + * either 0, 1 or 2 arguments. + * + * If no argument is given, returns a random number + * from 0 up to (but not including) 1. + * + * If one argument is given and it is a number, + * returns a random number from 0 up to (but not + * including) the number. + * + * If one argument is given and it is an array, + * returns a random element from that array. + * + * If two arguments are given, returns a random + * number from the first argument up to (but not + * including) the second argument. + * + * @param choices the array to choose from + * @return the random element from the array + */ + random(choices: any[]): any + + // src/math/trigonometry.js + + /** + * Returns a random number fitting a Gaussian, or + * normal, distribution. There is theoretically no + * minimum or maximum value that randomGaussian() + * might return. Rather, there is just a very low + * probability that values far from the mean will be + * returned; and a higher probability that numbers + * near the mean will be returned. Takes either 0, 1 + * or 2 arguments. + * + * If no args, returns a mean of 0 and standard + * deviation of 1. + * + * If one arg, that arg is the mean (standard + * deviation is 1). + * + * If two args, first is mean, second is standard + * deviation. + * + * @param mean the mean + * @param sd the standard deviation + * @return the random number + */ + randomGaussian(mean: number, sd: number): number + + /** + * The inverse of cos(), returns the arc cosine of a + * value. This function expects the values in the + * range of -1 to 1 and values are returned in the + * range 0 to PI (3.1415927). + * + * @param value the value whose arc cosine is to be + * returned + * @return the arc cosine of the given value + */ + acos(value: number): number + + /** + * The inverse of sin(), returns the arc sine of a + * value. This function expects the values in the + * range of -1 to 1 and values are returned in the + * range -PI/2 to PI/2. + * + * @param value the value whose arc sine is to be + * returned + * @return the arc sine of the given value + */ + asin(value: number): number + + /** + * The inverse of tan(), returns the arc tangent of a + * value. This function expects the values in the + * range of -Infinity to Infinity (exclusive) and + * values are returned in the range -PI/2 to PI/2. + * + * @param value the value whose arc tangent is to be + * returned + * @return the arc tangent of the given value + */ + atan(value: number): number + + /** + * Calculates the angle (in radians) from a specified + * point to the coordinate origin as measured from + * the positive x-axis. Values are returned as a + * float in the range from PI to -PI. The atan2() + * function is most often used for orienting geometry + * to the position of the cursor. Note: The + * y-coordinate of the point is the first parameter, + * and the x-coordinate is the second parameter, due + * the the structure of calculating the tangent. + * + * @param y y-coordinate of the point + * @param x x-coordinate of the point + * @return the arc tangent of the given point + */ + atan2(y: number, x: number): number + + /** + * Calculates the cosine of an angle. This function + * takes into account the current angleMode. Values + * are returned in the range -1 to 1. + * + * @param angle the angle + * @return the cosine of the angle + */ + cos(angle: number): number + + /** + * Calculates the sine of an angle. This function + * takes into account the current angleMode. Values + * are returned in the range -1 to 1. + * + * @param angle the angle + * @return the sine of the angle + */ + sin(angle: number): number + + /** + * Calculates the tangent of an angle. This function + * takes into account the current angleMode. Values + * are returned in the range -1 to 1. + * + * @param angle the angle + * @return the tangent of the angle + */ + tan(angle: number): number + + /** + * Converts a radian measurement to its corresponding + * value in degrees. Radians and degrees are two ways + * of measuring the same thing. There are 360 degrees + * in a circle and 2*PI radians in a circle. For + * example, 90° = PI/2 = 1.5707964. This function + * does not take into account the current angleMode. + * + * @param radians the radians value to convert to + * degrees + * @return the converted angle + */ + degrees(radians: number): number + + /** + * Converts a degree measurement to its corresponding + * value in radians. Radians and degrees are two ways + * of measuring the same thing. There are 360 degrees + * in a circle and 2*PI radians in a circle. For + * example, 90° = PI/2 = 1.5707964. This function + * does not take into account the current angleMode. + * + * @param degrees the degree value to convert to + * radians + * @return the converted angle + */ + radians(degrees: number): number + + // src/typography/attributes.js + + /** + * Sets the current mode of p5 to given mode. Default + * mode is RADIANS. + * + * @param mode either RADIANS or DEGREES + */ + angleMode(mode: ANGLE_MODE): void + + /** + * Sets the current alignment for drawing text. + * Accepts two arguments: horizAlign (LEFT, CENTER, + * or RIGHT) and vertAlign (TOP, BOTTOM, CENTER, or + * BASELINE). The horizAlign parameter is in + * reference to the x value of the text() function, + * while the vertAlign parameter is in reference to + * the y value. + * + * So if you write textAlign(LEFT), you are aligning + * the left edge of your text to the x value you give + * in text(). If you write textAlign(RIGHT, TOP), you + * are aligning the right edge of your text to the x + * value and the top of edge of the text to the y + * value. + * + * @param horizAlign horizontal alignment, either + * LEFT, CENTER, or RIGHT + * @param [vertAlign] vertical alignment, either TOP, + * BOTTOM, CENTER, or BASELINE + * @chainable + */ + textAlign(horizAlign: HORIZ_ALIGN, vertAlign?: VERT_ALIGN): p5 + + /** + * Sets the current alignment for drawing text. + * Accepts two arguments: horizAlign (LEFT, CENTER, + * or RIGHT) and vertAlign (TOP, BOTTOM, CENTER, or + * BASELINE). The horizAlign parameter is in + * reference to the x value of the text() function, + * while the vertAlign parameter is in reference to + * the y value. + * + * So if you write textAlign(LEFT), you are aligning + * the left edge of your text to the x value you give + * in text(). If you write textAlign(RIGHT, TOP), you + * are aligning the right edge of your text to the x + * value and the top of edge of the text to the y + * value. + * + */ + textAlign(): object + + /** + * Sets/gets the spacing, in pixels, between lines of + * text. This setting will be used in all subsequent + * calls to the text() function. + * + * @param leading the size in pixels for spacing + * between lines + * @chainable + */ + textLeading(leading: number): p5 + + /** + * Sets/gets the spacing, in pixels, between lines of + * text. This setting will be used in all subsequent + * calls to the text() function. + * + */ + textLeading(): number + + /** + * Sets/gets the current font size. This size will be + * used in all subsequent calls to the text() + * function. Font size is measured in pixels. + * + * @param theSize the size of the letters in units of + * pixels + * @chainable + */ + textSize(theSize: number): p5 + + /** + * Sets/gets the current font size. This size will be + * used in all subsequent calls to the text() + * function. Font size is measured in pixels. + * + */ + textSize(): number + + /** + * Sets/gets the style of the text for system fonts + * to NORMAL, ITALIC, or BOLD. Note: this may be is + * overridden by CSS styling. For non-system fonts + * (opentype, truetype, etc.) please load styled + * fonts instead. + * + * @param theStyle styling for text, either NORMAL, + * ITALIC, or BOLD + * @chainable + */ + textStyle(theStyle: THE_STYLE): p5 + + /** + * Sets/gets the style of the text for system fonts + * to NORMAL, ITALIC, or BOLD. Note: this may be is + * overridden by CSS styling. For non-system fonts + * (opentype, truetype, etc.) please load styled + * fonts instead. + * + */ + textStyle(): string + + /** + * Calculates and returns the width of any character + * or text string. + * + * @param theText the String of characters to measure + */ + textWidth(theText: string): number + + /** + * Returns the ascent of the current font at its + * current size. The ascent represents the distance, + * in pixels, of the tallest character above the + * baseline. + * + */ + textAscent(): number + + // src/typography/loading_displaying.js + + /** + * Returns the descent of the current font at its + * current size. The descent represents the distance, + * in pixels, of the character with the longest + * descender below the baseline. + * + */ + textDescent(): number + + /** + * Loads an opentype font file (.otf, .ttf) from a + * file or a URL, and returns a PFont Object. This + * method is asynchronous, meaning it may not finish + * before the next line in your sketch is executed. + * The path to the font should be relative to the + * HTML file that links in your sketch. Loading an + * from a URL or other remote location may be blocked + * due to your browser's built-in security. + * + * @param path name of the file or url to load + * @param [callback] function to be executed after + * loadFont() completes + * @param [onError] function to be executed if an + * error occurs + * @return p5.Font object + */ + loadFont(path: string, callback?: Function, onError?: Function): p5 + + /** + * Draws text to the screen. Displays the information + * specified in the first parameter on the screen in + * the position specified by the additional + * parameters. A default font will be used unless a + * font is set with the textFont() function and a + * default size will be used unless a font is set + * with textSize(). Change the color of the text with + * the fill() function. Change the outline of the + * text with the stroke() and strokeWeight() + * functions. The text displays in relation to the + * textAlign() function, which gives the option to + * draw to the left, right, and center of the + * coordinates. + * + * + * The x2 and y2 parameters define a rectangular area + * to display within and may only be used with string + * data. When these parameters are specified, they + * are interpreted based on the current rectMode() + * setting. Text that does not fit completely within + * the rectangle specified will not be drawn to the + * screen. + * + * @param str the alphanumeric symbols to be + * displayed + * @param x x-coordinate of text + * @param y y-coordinate of text + * @param [x2] by default, the width of the text box, + * see rectMode() for more info + * @param [y2] by default, the height of the text + * box, see rectMode() for more info + * @chainable + */ + text(str: string|object|any[], x: number, y: number, x2?: number, y2?: number): p5 + + /** + * Sets the current font that will be drawn with the + * text() function. + * + * @return the current font + */ + textFont(): object + + // src/utilities/array_functions.js + + /** + * Sets the current font that will be drawn with the + * text() function. + * + * @param font a font loaded via loadFont(), or a + * String representing a web safe font (a font that + * is generally available across all systems) + * @param [size] the font size to use + * @chainable + */ + textFont(font: object|string, size?: number): p5 + + /** + * Adds a value to the end of an array. Extends the + * length of the array by one. Maps to Array.push(). + * + * @param array Array to append + * @param value to be added to the Array + */ + append(array: any[], value: any): void + + /** + * Copies an array (or part of an array) to another + * array. The src array is copied to the dst array, + * beginning at the position specified by srcPosition + * and into the position specified by dstPosition. + * The number of elements to copy is determined by + * length. Note that copying values overwrites + * existing values in the destination array. To + * append values instead of overwriting them, use + * concat(). The simplified version with only two + * arguments, arrayCopy(src, dst), copies an entire + * array to another of the same size. It is + * equivalent to arrayCopy(src, 0, dst, 0, + * src.length). + * + * + * Using this function is far more efficient for + * copying array data than iterating through a for() + * loop and copying each element individually. + * + * @param src the source Array + * @param srcPosition starting position in the source + * Array + * @param dst the destination Array + * @param dstPosition starting position in the + * destination Array + * @param length number of Array elements to be + * copied + */ + arrayCopy(src: any[], srcPosition: number, dst: any[], dstPosition: number, length: number): void + + /** + * Copies an array (or part of an array) to another + * array. The src array is copied to the dst array, + * beginning at the position specified by srcPosition + * and into the position specified by dstPosition. + * The number of elements to copy is determined by + * length. Note that copying values overwrites + * existing values in the destination array. To + * append values instead of overwriting them, use + * concat(). The simplified version with only two + * arguments, arrayCopy(src, dst), copies an entire + * array to another of the same size. It is + * equivalent to arrayCopy(src, 0, dst, 0, + * src.length). + * + * + * Using this function is far more efficient for + * copying array data than iterating through a for() + * loop and copying each element individually. + * + * @param src the source Array + * @param dst the destination Array + * @param [length] number of Array elements to be + * copied + */ + arrayCopy(src: any[], dst: any[], length?: number): void + + /** + * Concatenates two arrays, maps to Array.concat(). + * Does not modify the input arrays. + * + * @param a first Array to concatenate + * @param b second Array to concatenate + * @return concatenated array + */ + concat(a: any[], b: any[]): any[] + + /** + * Reverses the order of an array, maps to + * Array.reverse() + * + * @param list Array to reverse + */ + reverse(list: any[]): void + + /** + * Decreases an array by one element and returns the + * shortened array, maps to Array.pop(). + * + * @param list Array to shorten + * @return shortened Array + */ + shorten(list: any[]): any[] + + /** + * Randomizes the order of the elements of an array. + * Implements Fisher-Yates Shuffle Algorithm. + * + * @param array Array to shuffle + * @param [bool] modify passed array + * @return shuffled Array + */ + shuffle(array: any[], bool?: boolean): any[] + + /** + * Sorts an array of numbers from smallest to + * largest, or puts an array of words in alphabetical + * order. The original array is not modified; a + * re-ordered array is returned. The count parameter + * states the number of elements to sort. For + * example, if there are 12 elements in an array and + * count is set to 5, only the first 5 elements in + * the array will be sorted. + * + * @param list Array to sort + * @param [count] number of elements to sort, + * starting from 0 + */ + sort(list: any[], count?: number): void + + /** + * Inserts a value or an array of values into an + * existing array. The first parameter specifies the + * initial array to be modified, and the second + * parameter defines the data to be inserted. The + * third parameter is an index value which specifies + * the array position from which to insert data. + * (Remember that array index numbering starts at + * zero, so the first position is 0, the second + * position is 1, and so on.) + * + * @param list Array to splice into + * @param value value to be spliced in + * @param position in the array from which to insert + * data + */ + splice(list: any[], value: any, position: number): void + + // src/utilities/conversion.js + + /** + * Extracts an array of elements from an existing + * array. The list parameter defines the array from + * which the elements will be copied, and the start + * and count parameters specify which elements to + * extract. If no count is given, elements will be + * extracted from the start to the end of the array. + * When specifying the start, remember that the first + * array element is 0. This function does not change + * the source array. + * + * @param list Array to extract from + * @param start position to begin + * @param [count] number of values to extract + * @return Array of extracted elements + */ + subset(list: any[], start: number, count?: number): any[] + + /** + * Converts a string to its floating point + * representation. The contents of a string must + * resemble a number, or NaN (not a number) will be + * returned. For example, float("1234.56") evaluates + * to 1234.56, but float("giraffe") will return NaN. + * When an array of values is passed in, then an + * array of floats of the same length is returned. + * + * @param str float string to parse + * @return floating point representation of string + */ + float(str: string): number + + /** + * Converts a boolean, string, or float to its + * integer representation. When an array of values is + * passed in, then an int array of the same length is + * returned. + * + * @param n value to parse + * @return integer representation of value + */ + int(n: string|boolean|number): number + + /** + * Converts a boolean, string, or float to its + * integer representation. When an array of values is + * passed in, then an int array of the same length is + * returned. + * + * @param ns values to parse + * @return integer representation of values + */ + int(ns: any[]): number[] + + /** + * Converts a boolean, string or number to its string + * representation. When an array of values is passed + * in, then an array of strings of the same length is + * returned. + * + * @param n value to parse + * @return string representation of value + */ + str(n: string|boolean|number|any[]): string + + /** + * Converts a number or string to its boolean + * representation. For a number, any non-zero value + * (positive or negative) evaluates to true, while + * zero evaluates to false. For a string, the value + * "true" evaluates to true, while any other value + * evaluates to false. When an array of number or + * string values is passed in, then a array of + * booleans of the same length is returned. + * + * @param n value to parse + * @return boolean representation of value + */ + boolean(n: string|boolean|number|any[]): boolean + + /** + * Converts a number, string representation of a + * number, or boolean to its byte representation. A + * byte can be only a whole number between -128 and + * 127, so when a value outside of this range is + * converted, it wraps around to the corresponding + * byte representation. When an array of number, + * string or boolean values is passed in, then an + * array of bytes the same length is returned. + * + * @param n value to parse + * @return byte representation of value + */ + byte(n: string|boolean|number): number + + /** + * Converts a number, string representation of a + * number, or boolean to its byte representation. A + * byte can be only a whole number between -128 and + * 127, so when a value outside of this range is + * converted, it wraps around to the corresponding + * byte representation. When an array of number, + * string or boolean values is passed in, then an + * array of bytes the same length is returned. + * + * @param ns values to parse + * @return array of byte representation of values + */ + byte(ns: any[]): number[] + + /** + * Converts a number or string to its corresponding + * single-character string representation. If a + * string parameter is provided, it is first parsed + * as an integer and then translated into a + * single-character string. When an array of number + * or string values is passed in, then an array of + * single-character strings of the same length is + * returned. + * + * @param n value to parse + * @return string representation of value + */ + char(n: string|number): string + + /** + * Converts a number or string to its corresponding + * single-character string representation. If a + * string parameter is provided, it is first parsed + * as an integer and then translated into a + * single-character string. When an array of number + * or string values is passed in, then an array of + * single-character strings of the same length is + * returned. + * + * @param ns values to parse + * @return array of string representation of values + */ + char(ns: any[]): string[] + + /** + * Converts a single-character string to its + * corresponding integer representation. When an + * array of single-character string values is passed + * in, then an array of integers of the same length + * is returned. + * + * @param n value to parse + * @return integer representation of value + */ + unchar(n: string): number + + /** + * Converts a single-character string to its + * corresponding integer representation. When an + * array of single-character string values is passed + * in, then an array of integers of the same length + * is returned. + * + * @param ns values to parse + * @return integer representation of values + */ + unchar(ns: any[]): number[] + + /** + * Converts a number to a string in its equivalent + * hexadecimal notation. If a second parameter is + * passed, it is used to set the number of characters + * to generate in the hexadecimal notation. When an + * array is passed in, an array of strings in + * hexadecimal notation of the same length is + * returned. + * + * @param n value to parse + * @return hexadecimal string representation of value + */ + hex(n: number, digits?: number): string + + /** + * Converts a number to a string in its equivalent + * hexadecimal notation. If a second parameter is + * passed, it is used to set the number of characters + * to generate in the hexadecimal notation. When an + * array is passed in, an array of strings in + * hexadecimal notation of the same length is + * returned. + * + * @param ns array of values to parse + * @return hexadecimal string representation of + * values + */ + hex(ns: number[], digits?: number): string[] + + /** + * Converts a string representation of a hexadecimal + * number to its equivalent integer value. When an + * array of strings in hexadecimal notation is passed + * in, an array of integers of the same length is + * returned. + * + * @param n value to parse + * @return integer representation of hexadecimal + * value + */ + unhex(n: string): number + + // src/utilities/string_functions.js + + /** + * Converts a string representation of a hexadecimal + * number to its equivalent integer value. When an + * array of strings in hexadecimal notation is passed + * in, an array of integers of the same length is + * returned. + * + * @param ns values to parse + * @return integer representations of hexadecimal + * value + */ + unhex(ns: any[]): number[] + + /** + * Combines an array of Strings into one String, each + * separated by the character(s) used for the + * separator parameter. To join arrays of ints or + * floats, it's necessary to first convert them to + * Strings using nf() or nfs(). + * + * @param list array of Strings to be joined + * @param separator String to be placed between each + * item + * @return joined String + */ + join(list: any[], separator: string): string + + /** + * This function is used to apply a regular + * expression to a piece of text, and return matching + * groups (elements found inside parentheses) as a + * String array. If there are no matches, a null + * value will be returned. If no groups are specified + * in the regular expression, but the sequence + * matches, an array of length 1 (with the matched + * text as the first element of the array) will be + * returned. To use the function, first check to see + * if the result is null. If the result is null, then + * the sequence did not match at all. If the sequence + * did match, an array is returned. + * + * + * If there are groups (specified by sets of + * parentheses) in the regular expression, then the + * contents of each will be returned in the array. + * Element [0] of a regular expression match returns + * the entire matching string, and the match groups + * start at element [1] (the first group is [1], the + * second [2], and so on). + * + * @param str the String to be searched + * @param regexp the regexp to be used for matching + * @return Array of Strings found + */ + match(str: string, regexp: string): string[] + + /** + * This function is used to apply a regular + * expression to a piece of text, and return a list + * of matching groups (elements found inside + * parentheses) as a two-dimensional String array. If + * there are no matches, a null value will be + * returned. If no groups are specified in the + * regular expression, but the sequence matches, a + * two dimensional array is still returned, but the + * second dimension is only of length one. To use + * the function, first check to see if the result is + * null. If the result is null, then the sequence did + * not match at all. If the sequence did match, a 2D + * array is returned. + * + * + * If there are groups (specified by sets of + * parentheses) in the regular expression, then the + * contents of each will be returned in the array. + * Assuming a loop with counter variable i, element + * [i][0] of a regular expression match returns the + * entire matching string, and the match groups start + * at element [i][1] (the first group is [i][1], the + * second [i][2], and so on). + * + * @param str the String to be searched + * @param regexp the regexp to be used for matching + * @return 2d Array of Strings found + */ + matchAll(str: string, regexp: string): string[] + + /** + * Utility function for formatting numbers into + * strings. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for the digits, left, and right + * parameters should always be positive integers. + * + * @param num the Number to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted String + */ + nf(num: number|string, left?: number|string, right?: number|string): string + + /** + * Utility function for formatting numbers into + * strings. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for the digits, left, and right + * parameters should always be positive integers. + * + * @param nums the Numbers to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted Strings + */ + nf(nums: any[], left?: number|string, right?: number|string): string[] + + /** + * Utility function for formatting numbers into + * strings and placing appropriate commas to mark + * units of 1000. There are two versions: one for + * formatting ints, and one for formatting an array + * of ints. The value for the right parameter should + * always be a positive integer. + * + * @param num the Number to format + * @param [right] number of digits to the right of + * the decimal point + * @return formatted String + */ + nfc(num: number|string, right?: number|string): string + + /** + * Utility function for formatting numbers into + * strings and placing appropriate commas to mark + * units of 1000. There are two versions: one for + * formatting ints, and one for formatting an array + * of ints. The value for the right parameter should + * always be a positive integer. + * + * @param nums the Numbers to format + * @param [right] number of digits to the right of + * the decimal point + * @return formatted Strings + */ + nfc(nums: any[], right?: number|string): string[] + + /** + * Utility function for formatting numbers into + * strings. Similar to nf() but puts a "+" in front + * of positive numbers and a "-" in front of negative + * numbers. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for left, and right parameters should + * always be positive integers. + * + * @param num the Number to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted String + */ + nfp(num: number, left?: number, right?: number): string + + /** + * Utility function for formatting numbers into + * strings. Similar to nf() but puts a "+" in front + * of positive numbers and a "-" in front of negative + * numbers. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for left, and right parameters should + * always be positive integers. + * + * @param nums the Numbers to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted Strings + */ + nfp(nums: number[], left?: number, right?: number): string[] + + /** + * Utility function for formatting numbers into + * strings. Similar to nf() but puts a " " (space) in + * front of positive numbers and a "-" in front of + * negative numbers. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for the digits, left, and right + * parameters should always be positive integers. + * + * @param num the Number to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted String + */ + nfs(num: number, left?: number, right?: number): string + + /** + * Utility function for formatting numbers into + * strings. Similar to nf() but puts a " " (space) in + * front of positive numbers and a "-" in front of + * negative numbers. There are two versions: one for + * formatting floats, and one for formatting ints. + * The values for the digits, left, and right + * parameters should always be positive integers. + * + * @param nums the Numbers to format + * @param [left] number of digits to the left of the + * decimal point + * @param [right] number of digits to the right of + * the decimal point + * @return formatted Strings + */ + nfs(nums: any[], left?: number, right?: number): string[] + + /** + * The split() function maps to String.split(), it + * breaks a String into pieces using a character or + * string as the delimiter. The delim parameter + * specifies the character or characters that mark + * the boundaries between each piece. A String[] + * array is returned that contains each of the + * pieces. The splitTokens() function works in a + * similar fashion, except that it splits using a + * range of characters instead of a specific + * character or sequence. + * + * @param value the String to be split + * @param delim the String used to separate the data + * @return Array of Strings + */ + split(value: string, delim: string): string[] + + /** + * The splitTokens() function splits a String at one + * or many character delimiters or "tokens." The + * delim parameter specifies the character or + * characters to be used as a boundary. If no delim + * characters are specified, any whitespace character + * is used to split. Whitespace characters include + * tab (\t), line feed (\n), carriage return (\r), + * form feed (\f), and space. + * + * @param value the String to be split + * @param [delim] list of individual Strings that + * will be used as separators + * @return Array of Strings + */ + splitTokens(value: string, delim?: string): string[] + + /** + * Removes whitespace characters from the beginning + * and end of a String. In addition to standard + * whitespace characters such as space, carriage + * return, and tab, this function also removes the + * Unicode "nbsp" character. + * + * @param str a String to be trimmed + * @return a trimmed String + */ + trim(str: string): string + + // src/utilities/time_date.js + + /** + * Removes whitespace characters from the beginning + * and end of a String. In addition to standard + * whitespace characters such as space, carriage + * return, and tab, this function also removes the + * Unicode "nbsp" character. + * + * @param strs an Array of Strings to be trimmed + * @return an Array of trimmed Strings + */ + trim(strs: any[]): string[] + + /** + * p5.js communicates with the clock on your + * computer. The day() function returns the current + * day as a value from 1 - 31. + * + * @return the current day + */ + day(): number + + /** + * p5.js communicates with the clock on your + * computer. The hour() function returns the current + * hour as a value from 0 - 23. + * + * @return the current hour + */ + hour(): number + + /** + * p5.js communicates with the clock on your + * computer. The minute() function returns the + * current minute as a value from 0 - 59. + * + * @return the current minute + */ + minute(): number + + /** + * Returns the number of milliseconds (thousandths of + * a second) since starting the program. This + * information is often used for timing events and + * animation sequences. + * + * @return the number of milliseconds since starting + * the program + */ + millis(): number + + /** + * p5.js communicates with the clock on your + * computer. The month() function returns the current + * month as a value from 1 - 12. + * + * @return the current month + */ + month(): number + + /** + * p5.js communicates with the clock on your + * computer. The second() function returns the + * current second as a value from 0 - 59. + * + * @return the current second + */ + second(): number + + // src/webgl/camera.js + + /** + * p5.js communicates with the clock on your + * computer. The year() function returns the current + * year as an integer (2014, 2015, 2016, etc). + * + * @return the current year + */ + year(): number + + /** + * Sets camera position for a 3D sketch. The function + * behaves similarly gluLookAt, except that it + * replaces the existing modelview matrix instead of + * applying any transformations calculated here on + * top of the existing model view. When called with + * no arguments, this function sets a default camera + * equivalent to calling camera(0, 0, (height/2.0) / + * tan(PI*30.0 / 180.0), 0, 0, 0, 0, 1, 0); + * + * @param [x] camera position value on x axis + * @param [y] camera position value on y axis + * @param [z] camera position value on z axis + * @param [centerX] x coordinate representing center + * of the sketch + * @param [centerY] y coordinate representing center + * of the sketch + * @param [centerZ] z coordinate representing center + * of the sketch + * @param [upX] x component of direction 'up' from + * camera + * @param [upY] y component of direction 'up' from + * camera + * @param [upZ] z component of direction 'up' from + * camera + * @chainable + */ + camera(x?: number, y?: number, z?: number, centerX?: number, centerY?: number, centerZ?: number, upX?: number, upY?: number, upZ?: number): p5 + + /** + * Sets perspective camera. When called with no + * arguments, the defaults provided are equivalent to + * perspective(PI/3.0, width/height, cameraZ/10.0, + * cameraZ10.0) where cameraZ is ((height/2.0) / + * tan(PI60.0/360.0)); + * + * @param [fovy] camera frustum vertical field of + * view, from bottom to top of view, in angleMode + * units + * @param [aspect] camera frustum aspect ratio + * @param [near] frustum near plane length + * @param [far] frustum far plane length + * @chainable + */ + perspective(fovy?: number, aspect?: number, near?: number, far?: number): p5 + + // src/webgl/interaction.js + + /** + * Setup ortho camera + * + * @param [left] camera frustum left plane + * @param [right] camera frustum right plane + * @param [bottom] camera frustum bottom plane + * @param [top] camera frustum top plane + * @param [near] camera frustum near plane + * @param [far] camera frustum far plane + * @chainable + */ + ortho(left?: number, right?: number, bottom?: number, top?: number, near?: number, far?: number): p5 + + // src/webgl/light.js + + orbitControl(): p5 + + /** + * Creates an ambient light with a color + * + * @param v1 red or hue value relative to the current + * color range + * @param v2 green or saturation value relative to + * the current color range + * @param v3 blue or brightness value relative to the + * current color range + * @chainable + */ + ambientLight(v1: number, v2: number, v3: number, alpha?: number): p5 + + /** + * Creates an ambient light with a color + * + * @param value a color string + * @chainable + */ + ambientLight(value: string, alpha?: number): p5 + + /** + * Creates an ambient light with a color + * + * @param values an array containing the + * red,green,blue & and alpha components of the color + * @chainable + */ + ambientLight(values: number[]): p5 + + /** + * Creates an ambient light with a color + * + * @param color the ambient light color + * @chainable + */ + ambientLight(color: p5.Color): p5 + + /** + * Creates a directional light with a color and a + * direction + * + * @param v1 red or hue value (depending on the + * current color mode), + * @param v2 green or saturation value + * @param v3 blue or brightness value + * @param position the direction of the light + * @chainable + */ + directionalLight(v1: number, v2: number, v3: number, position: p5.Vector): p5 + + /** + * Creates a directional light with a color and a + * direction + * + * @param color color Array, CSS color string, or + * p5.Color value + * @param x x axis direction + * @param y y axis direction + * @param z z axis direction + * @chainable + */ + directionalLight(color: number[]|string|p5.Color, x: number, y: number, z: number): p5 + + /** + * Creates a directional light with a color and a + * direction + * + * @param color color Array, CSS color string, or + * p5.Color value + * @param position the direction of the light + * @chainable + */ + directionalLight(color: number[]|string|p5.Color, position: p5.Vector): p5 + + /** + * Creates a directional light with a color and a + * direction + * + * @param v1 red or hue value (depending on the + * current color mode), + * @param v2 green or saturation value + * @param v3 blue or brightness value + * @param x x axis direction + * @param y y axis direction + * @param z z axis direction + * @chainable + */ + directionalLight(v1: number, v2: number, v3: number, x: number, y: number, z: number): p5 + + /** + * Creates a point light with a color and a light + * position + * + * @param v1 red or hue value (depending on the + * current color mode), + * @param v2 green or saturation value + * @param v3 blue or brightness value + * @param x x axis position + * @param y y axis position + * @param z z axis position + * @chainable + */ + pointLight(v1: number, v2: number, v3: number, x: number, y: number, z: number): p5 + + /** + * Creates a point light with a color and a light + * position + * + * @param v1 red or hue value (depending on the + * current color mode), + * @param v2 green or saturation value + * @param v3 blue or brightness value + * @param position the position of the light + * @chainable + */ + pointLight(v1: number, v2: number, v3: number, position: p5.Vector): p5 + + /** + * Creates a point light with a color and a light + * position + * + * @param color color Array, CSS color string, or + * p5.Color value + * @param x x axis position + * @param y y axis position + * @param z z axis position + * @chainable + */ + pointLight(color: number[]|string|p5.Color, x: number, y: number, z: number): p5 + + // src/webgl/loading.js + + /** + * Creates a point light with a color and a light + * position + * + * @param color color Array, CSS color string, or + * p5.Color value + * @param position the position of the light + * @chainable + */ + pointLight(color: number[]|string|p5.Color, position: p5.Vector): p5 + + /** + * Load a 3d model from an OBJ file. One of the + * limitations of the OBJ format is that it doesn't + * have a built-in sense of scale. This means that + * models exported from different programs might be + * very different sizes. If your model isn't + * displaying, try calling loadModel() with the + * normalized parameter set to true. This will resize + * the model to a scale appropriate for p5. You can + * also make additional changes to the final size of + * your model with the scale() function. + * + * @param path Path of the model to be loaded + * @param normalize If true, scale the model to a + * standardized size when loading + * @param [successCallback] Function to be called + * once the model is loaded. Will be passed the 3D + * model object. + * @param [failureCallback] called with event error + * if the image fails to load. + * @return the p5.Geometry object + */ + loadModel(path: string, normalize: boolean, successCallback?: (p1: p5.Geometry) => any, failureCallback?: (p1: Event) => any): p5.Geometry + + /** + * Load a 3d model from an OBJ file. One of the + * limitations of the OBJ format is that it doesn't + * have a built-in sense of scale. This means that + * models exported from different programs might be + * very different sizes. If your model isn't + * displaying, try calling loadModel() with the + * normalized parameter set to true. This will resize + * the model to a scale appropriate for p5. You can + * also make additional changes to the final size of + * your model with the scale() function. + * + * @param path Path of the model to be loaded + * @param [successCallback] Function to be called + * once the model is loaded. Will be passed the 3D + * model object. + * @param [failureCallback] called with event error + * if the image fails to load. + * @return the p5.Geometry object + */ + loadModel(path: string, successCallback?: (p1: p5.Geometry) => any, failureCallback?: (p1: Event) => any): p5.Geometry + + // src/webgl/material.js + + /** + * Render a 3d model to the screen. + * + * @param model Loaded 3d model to be rendered + */ + model(model: p5.Geometry): void + + /** + * Loads a custom shader from the provided vertex and + * fragment shader paths. The shader files are loaded + * asynchronously in the background, so this method + * should be used in preload(). For now, there are + * three main types of shaders. p5 will automatically + * supply appropriate vertices, normals, colors, and + * lighting attributes if the parameters defined in + * the shader match the names. + * + * @param [vertFilename] path to file containing + * vertex shader source code + * @param [fragFilename] path to file containing + * fragment shader source code + * @return a shader object created from the provided + * vertex and fragment shader files. + */ + loadShader(vertFilename?: string, fragFilename?: string): p5.Shader + + createShader(vertSrc: string, fragSrc: string): p5.Shader + + /** + * The shader() function lets the user provide a + * custom shader to fill in shapes in WEBGL mode. + * Users can create their own shaders by loading + * vertex and fragment shaders with loadShader(). + * + * @param [s] the desired p5.Shader to use for + * rendering shapes. + * @chainable + */ + shader(s?: p5.Shader): p5 + + /** + * Normal material for geometry. You can view all + * possible materials in this example. + * + * @chainable + */ + normalMaterial(): p5 + + /** + * Texture for geometry. You can view other possible + * materials in this example. + * + * @param tex 2-dimensional graphics to render as + * texture + * @chainable + */ + texture(tex: p5.Image|p5.MediaElement|p5.Graphics): p5 + + /** + * Ambient material for geometry with a given color. + * You can view all possible materials in this + * example. + * + * @param v1 gray value, red or hue value (depending + * on the current color mode), + * @param [v2] green or saturation value + * @param [v3] blue or brightness value + * @param [a] opacity + * @chainable + */ + ambientMaterial(v1: number, v2?: number, v3?: number, a?: number): p5 + + /** + * Ambient material for geometry with a given color. + * You can view all possible materials in this + * example. + * + * @param color color, color Array, or CSS color + * string + * @chainable + */ + ambientMaterial(color: number[]|string|p5.Color): p5 + + /** + * Specular material for geometry with a given color. + * You can view all possible materials in this + * example. + * + * @param v1 gray value, red or hue value (depending + * on the current color mode), + * @param [v2] green or saturation value + * @param [v3] blue or brightness value + * @param [a] opacity + * @chainable + */ + specularMaterial(v1: number, v2?: number, v3?: number, a?: number): p5 + + // src/webgl/p5.RendererGL.js + + /** + * Specular material for geometry with a given color. + * You can view all possible materials in this + * example. + * + * @param color color Array, or CSS color string + * @chainable + */ + specularMaterial(color: number[]|string|p5.Color): p5 + + /** + * Set attributes for the WebGL Drawing context. This + * is a way of adjusting ways that the WebGL renderer + * works to fine-tune the display and performance. + * This should be put in setup(). The available + * attributes are: alpha - indicates if the canvas + * contains an alpha buffer + * + * default is true + * + * + * depth - indicates whether the drawing buffer has a + * depth buffer of at least 16 bits - default is true + * + * + * stencil - indicates whether the drawing buffer has + * a stencil buffer of at least 8 bits + * + * + * antialias - indicates whether or not to perform + * anti-aliasing + * + * default is false + * + * + * premultipliedAlpha - indicates that the page + * compositor will assume the drawing buffer contains + * colors with pre-multiplied alpha + * + * default is false + * + * + * preserveDrawingBuffer - if true the buffers will + * not be cleared and and will preserve their values + * until cleared or overwritten by author (note that + * p5 clears automatically on draw loop) + * + * default is true + * + * + * perPixelLighting - if true, per-pixel lighting + * will be used in the lighting shader. + * + * default is false + * + * @param key Name of attribute + * @param value New value of named attribute + */ + setAttributes(key: string, value: boolean): void + + // src/webgl/primitives.js + + /** + * Set attributes for the WebGL Drawing context. This + * is a way of adjusting ways that the WebGL renderer + * works to fine-tune the display and performance. + * This should be put in setup(). The available + * attributes are: alpha - indicates if the canvas + * contains an alpha buffer + * + * default is true + * + * + * depth - indicates whether the drawing buffer has a + * depth buffer of at least 16 bits - default is true + * + * + * stencil - indicates whether the drawing buffer has + * a stencil buffer of at least 8 bits + * + * + * antialias - indicates whether or not to perform + * anti-aliasing + * + * default is false + * + * + * premultipliedAlpha - indicates that the page + * compositor will assume the drawing buffer contains + * colors with pre-multiplied alpha + * + * default is false + * + * + * preserveDrawingBuffer - if true the buffers will + * not be cleared and and will preserve their values + * until cleared or overwritten by author (note that + * p5 clears automatically on draw loop) + * + * default is true + * + * + * perPixelLighting - if true, per-pixel lighting + * will be used in the lighting shader. + * + * default is false + * + * @param obj object with key-value pairs + */ + setAttributes(obj: object): void + + /** + * Draw a plane with given a width and height + * + * @param [width] width of the plane + * @param [height] height of the plane + * @param [detailX] Optional number of triangle + * subdivisions in x-dimension + * @param [detailY] Optional number of triangle + * subdivisions in y-dimension + * @chainable + */ + plane(width?: number, height?: number, detailX?: number, detailY?: number): p5 + + /** + * Draw a box with given width, height and depth + * + * @param [width] width of the box + * @param [Height] height of the box + * @param [depth] depth of the box + * @param [detailX] Optional number of triangle + * subdivisions in x-dimension + * @param [detailY] Optional number of triangle + * subdivisions in y-dimension + * @chainable + */ + box(width?: number, Height?: number, depth?: number, detailX?: number, detailY?: number): p5 + + /** + * Draw a sphere with given radius + * + * @param [radius] radius of circle + * @param [detailX] number of segments, the more + * segments the smoother geometry default is 24 + * @param [detailY] number of segments, the more + * segments the smoother geometry default is 16 + * @chainable + */ + sphere(radius?: number, detailX?: number, detailY?: number): p5 + + /** + * Draw a cylinder with given radius and height + * + * @param [radius] radius of the surface + * @param [height] height of the cylinder + * @param [detailX] number of segments, the more + * segments the smoother geometry default is 24 + * @param [detailY] number of segments in + * y-dimension, the more segments the smoother + * geometry default is 1 + * @param [bottomCap] whether to draw the bottom of + * the cylinder + * @param [topCap] whether to draw the top of the + * cylinder + * @chainable + */ + cylinder(radius?: number, height?: number, detailX?: number, detailY?: number, bottomCap?: boolean, topCap?: boolean): p5 + + /** + * Draw a cone with given radius and height + * + * @param [radius] radius of the bottom surface + * @param [height] height of the cone + * @param [detailX] number of segments, the more + * segments the smoother geometry default is 24 + * @param [detailY] number of segments, the more + * segments the smoother geometry default is 1 + * @param [cap] whether to draw the base of the cone + * @chainable + */ + cone(radius?: number, height?: number, detailX?: number, detailY?: number, cap?: boolean): p5 + + /** + * Draw an ellipsoid with given radius + * + * @param [radiusx] xradius of circle + * @param [radiusy] yradius of circle + * @param [radiusz] zradius of circle + * @param [detailX] number of segments, the more + * segments the smoother geometry default is 24. + * Avoid detail number above 150, it may crash the + * browser. + * @param [detailY] number of segments, the more + * segments the smoother geometry default is 16. + * Avoid detail number above 150, it may crash the + * browser. + * @chainable + */ + ellipsoid(radiusx?: number, radiusy?: number, radiusz?: number, detailX?: number, detailY?: number): p5 + + // lib/addons/p5.sound.js + + /** + * Draw a torus with given radius and tube radius + * + * @param [radius] radius of the whole ring + * @param [tubeRadius] radius of the tube + * @param [detailX] number of segments in + * x-dimension, the more segments the smoother + * geometry default is 24 + * @param [detailY] number of segments in + * y-dimension, the more segments the smoother + * geometry default is 16 + * @chainable + */ + torus(radius?: number, tubeRadius?: number, detailX?: number, detailY?: number): p5 + + /** + * Returns a number representing the sample rate, in + * samples per second, of all sound objects in this + * audio context. It is determined by the sampling + * rate of your operating system's sound card, and it + * is not currently possile to change. It is often + * 44100, or twice the range of human hearing. + * + * @return samplerate samples per second + */ + sampleRate(): number + + /** + * Returns the closest MIDI note value for a given + * frequency. + * + * @param frequency A freqeuncy, for example, the "A" + * above Middle C is 440Hz + * @return MIDI note value + */ + freqToMidi(frequency: number): number + + /** + * Returns the frequency value of a MIDI note value. + * General MIDI treats notes as integers where middle + * C is 60, C# is 61, D is 62 etc. Useful for + * generating musical frequencies with oscillators. + * + * @param midiNote The number of a MIDI note + * @return Frequency value of the given MIDI note + */ + midiToFreq(midiNote: number): number + + // Properties from p5.dom + + // lib/addons/p5.dom.js + + /** + * List the SoundFile formats that you will include. + * LoadSound will search your directory for these + * extensions, and will pick a format that is + * compatable with the client's web browser. Here is + * a free online file converter. + * + * @param [formats] i.e. 'mp3', 'wav', 'ogg' + */ + soundFormats(formats?: string): void + + /** + * Searches the page for an element with the given + * ID, class, or tag name (using the '#' or '.' + * prefixes to specify an ID or class respectively, + * and none for a tag) and returns it as a + * p5.Element. If a class or tag name is given with + * more than 1 element, only the first element will + * be returned. The DOM node itself can be accessed + * with .elt. Returns null if none found. You can + * also specify a container to search within. + * + * @param name id, class, or tag name of element to + * search for + * @param [container] id, p5.Element, or HTML element + * to search within + * @return p5.Element containing node found + */ + select(name: string, container?: string): object|p5.Element|null + + /** + * Searches the page for elements with the given + * class or tag name (using the '.' prefix to specify + * a class and no prefix for a tag) and returns them + * as p5.Elements in an array. The DOM node itself + * can be accessed with .elt. Returns an empty array + * if none found. You can also specify a container to + * search within. + * + * @param name class or tag name of elements to + * search for + * @param [container] id, p5.Element, or HTML element + * to search within + * @return Array of p5.Elements containing nodes + * found + */ + selectAll(name: string, container?: string): any[] + + /** + * Removes all elements created by p5, except any + * canvas / graphics elements created by createCanvas + * or createGraphics. Event handlers are removed, and + * element is removed from the DOM. + * + */ + removeElements(): void + + /** + * Creates a

element in the DOM with + * given inner HTML. Appends to the container node if + * one is specified, otherwise appends to body. + * + * @param [html] inner HTML for element created + * @return pointer to p5.Element holding created node + */ + createDiv(html?: string): object|p5.Element + + /** + * Creates a

element in the DOM with given + * inner HTML. Used for paragraph length text. + * Appends to the container node if one is specified, + * otherwise appends to body. + * + * @param [html] inner HTML for element created + * @return pointer to p5.Element holding created node + */ + createP(html?: string): object|p5.Element + + /** + * Creates a element in the DOM with + * given inner HTML. Appends to the container node if + * one is specified, otherwise appends to body. + * + * @param [html] inner HTML for element created + * @return pointer to p5.Element holding created node + */ + createSpan(html?: string): object|p5.Element + + /** + * Creates an element in the DOM with given src + * and alternate text. Appends to the container node + * if one is specified, otherwise appends to body. + * + * @param src src path or url for image + * @param [alt] alternate text to be used if image + * does not load + * @param [successCallback] callback to be called + * once image data is loaded + * @return pointer to p5.Element holding created node + */ + createImg(src: string, alt?: string, successCallback?: Function): object|p5.Element + + /** + * Creates an
element in the DOM for + * including a hyperlink. Appends to the container + * node if one is specified, otherwise appends to + * body. + * + * @param href url of page to link to + * @param html inner html of link element to display + * @param [target] target where new link should open, + * could be _blank, _self, _parent, _top. + * @return pointer to p5.Element holding created node + */ + createA(href: string, html: string, target?: string): object|p5.Element + + /** + * Creates a slider element in the + * DOM. Use .size() to set the display length of the + * slider. Appends to the container node if one is + * specified, otherwise appends to body. + * + * @param min minimum value of the slider + * @param max maximum value of the slider + * @param [value] default value of the slider + * @param [step] step size for each tick of the + * slider (if step is set to 0, the slider will move + * continuously from the minimum to the maximum + * value) + * @return pointer to p5.Element holding created node + */ + createSlider(min: number, max: number, value?: number, step?: number): object|p5.Element + + /** + * Creates a element in the DOM. + * Use .size() to set the display size of the button. + * Use .mousePressed() to specify behavior on press. + * Appends to the container node if one is specified, + * otherwise appends to body. + * + * @param label label displayed on the button + * @param [value] value of the button + * @return pointer to p5.Element holding created node + */ + createButton(label: string, value?: string): object|p5.Element + + /** + * Creates a checkbox element in the + * DOM. Calling .checked() on a checkbox returns if + * it is checked or not + * + * @param [label] label displayed after checkbox + * @param [value] value of the checkbox; checked is + * true, unchecked is false + * @return pointer to p5.Element holding created node + */ + createCheckbox(label?: string, value?: boolean): object|p5.Element + + /** + * Creates a dropdown menu element + * in the DOM. It also helps to assign select-box + * methods to p5.Element when selecting existing + * select box + * + * @param [multiple] true if dropdown should support + * multiple selections + */ + createSelect(multiple?: boolean): p5.Element + + /** + * Creates a dropdown menu element + * in the DOM. It also helps to assign select-box + * methods to p5.Element when selecting existing + * select box + * + * @param existing DOM select element + */ + createSelect(existing: object): p5.Element + + /** + * Creates a radio button element in + * the DOM. The .option() method can be used to set + * options for the radio after it is created. The + * .value() method will return the currently selected + * option. + * + * @param [divId] the id and name of the created div + * and input field respectively + * @return pointer to p5.Element holding created node + */ + createRadio(divId?: string): object|p5.Element + + /** + * Creates an element in the DOM for + * text input. Use .size() to set the display length + * of the box. Appends to the container node if one + * is specified, otherwise appends to body. + * + * @param [value] default value of the input box + * @param [type] type of text, ie text, password etc. + * Defaults to text + * @return pointer to p5.Element holding created node + */ + createInput(value?: string, type?: string): object|p5.Element + + /** + * Creates an element in the DOM of + * type 'file'. This allows users to select local + * files for use in a sketch. + * + * @param [callback] callback function for when a + * file loaded + * @param [multiple] optional to allow multiple files + * selected + * @return pointer to p5.Element holding created DOM + * element + */ + createFileInput(callback?: Function, multiple?: string): object|p5.Element + + /** + * Creates an HTML5