From 7c3e24104a7fe0ec83fe62fc3c5844084a67c5fb Mon Sep 17 00:00:00 2001 From: damp11113 Date: Mon, 1 Jul 2024 21:10:48 +0700 Subject: [PATCH] add internal block and define the block --- ccIDE Functions Defines.xlsx | Bin 0 -> 32302 bytes package-lock.json | 76 +---------------------------------- peripherals/test/toolbox.xml | 8 ---- src/blocksmanager.js | 1 - src/module_block_design.json | 50 +++++++++++++++++++++++ src/module_generator.js | 0 src/toolbox.xml | 39 +++++++++++------- src/virtualcode.js | 17 ++++++++ 8 files changed, 92 insertions(+), 99 deletions(-) create mode 100644 ccIDE Functions Defines.xlsx create mode 100644 src/module_block_design.json create mode 100644 src/module_generator.js diff --git a/ccIDE Functions Defines.xlsx b/ccIDE Functions Defines.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bde2fb2d0b976ccf3216676fb9c021b3fedf8746 GIT binary patch literal 32302 zcmeFZWmH_*)-FtN3GVLhuEE{iC0K9>?vUW_?jGDFcyM=z;0^(TJKTakr#pR4`n}(e z@BX@%u|^exHTRU~nX;;=UGh>OpeR7#K#)K{K!iY+po`XCZ-9W(z=42}fgpjkglw!G zjIAB?lwCg>+w0J|SXmO}fC5uw0RaQ#|KHF5#Rv?m3|MzEAhfC-@Cmo6cJr4M7enGS z;b@WUK_s~lpaomGfiqd*~BxCaR;uDmb*08X^R%U*8%O^?w10MAZ%w~DYjX8#B z-EAe-Hw)Hm_{PUHpYy?IFmje${i{;q<63BM&Ls!>)uUTVXJ?d?`orlJuy_#tC<0plU)YhH*GOxKBrc(*V+MpEizQ0H``I4u&y1_ zBPZf2e(!5L5-$96p6|`EZ`jy*q^KXK9YRzB=~{k;5a_#J?Lr_o{xquCP?(!=PjLt_ z9X^i8w1PLXC!J(X2L}Nr1dvAWv2~jT-w*XGcsMO(kGjFSK{SLtCmh2AGVb{q1W5jG zWm~7hKzsq%kp@&H44`cF?2Ik#>FHh`|6jTOUtFWVgkBmWBiF_7HsD13A+Y~?W;qH$ zP|8_AyqQqh>yyNH_`2|1671!6avTI@EME{Y?^dse!KG!M@PmHBs|}XYP$U#?;(F(@ zfW$jnM+ho1y980&()Dgcr z0ch`%KWp~NXsj6Al)sq~R5~gPsBB=*I*1)h^`1*8*oWl{;*|a|nT*m?2Z zPra;Xf<2w+!cPRXvA-JHA*SM339H%)Sr?A+JW4gMS znN37@Gv};w-y!x|EQUKeeAvg@ht`~3-c*0)9SY~4`}$2M7<)0g>PhK7LvkXM-vk-&{wgM}SwuOzRDRxLi zZZKauG)DnN&9}7s-Qa%F;4oQZB~82Bwe=iew)0kb&2J)m~ZZW3ZcEdIwqUvYAP;+5#`hgV*bR&o)`HbmJmFiiclJ9_z^3{g6T|o z2-Td`xP7xDp{;2Z$*M76cvy@egePm+Odfo-@64b&lURHz z;b3CMWk10+cs&;Fpg1Wi$bWSb@_NfkEU%tL{}WYITlnU)o}q#nh()g((n!1gNAFSF zKDG0>pZQsjEffW2Y<%+MymbDn=#(9 z{37t4fc;ujbt7=JTQO`HM6x&-nDug+i}b-`4|)MSTW<)hq_fn5CZ?g%EI3as@M=Lb z`0K=0hp*6a2cZg9U|<^q*9AoHIM_8i$BB)&sSpG>t*cx=Cxdf*xl;zpSIVrbEg?qu zXyd?1pVA&u^aH5s3POYaIx=Ev2Uu!*o-SCyB}nZ)HYD~sW}CQtjUN&N{nv^Y>`gVr zZKl_qu{6}f-C^qnP!$8%)j^C9;U$o%->#!9e}GkO1BtMUDXwN4cUPTY>85b6K;}#A zY*!fN--p6q^?p#|ERd-(m(aAw#v<_U@6o%Vy0}NS0;P zMvg_gO?RYRwzhTn!?klG(&V#S^FRPje88{{9Q_lZT>ra}KWlv*fB}@aJ}3|n77*kc zKq3Dz@O~}le-FPmfU_z<_W$mmmbeb{*XHlr>O0|S8{@Q$;pj%`tJ`q=MmncEI~bS7 zQESDEtkUUojE*23xWvsfAIZYfvhz}q+=ViC2|=&{f~mdQbiLwFTMthcaDh^*Y-|$+ zfk@EiA5Yfz0pU9zgQb_FA*m8jFm{ebBnM&ZQ;6oWVdE!nRqY`?Nx9QA9sHTXH^VQy zSqZSsLWHuv;fJ6G8LoouKG*4J%yJ&1c3HUdjT8OW{<0cPx9 zVvw`%jGDj;b-v1;a{$B2|MGs)pF38zg9N6FM2R6)qp#Z&IpL|Afu&pND$;(@-bK>I z5nqrqEtXcDo+t9sMrdo#u-^-i0soy!g__pS`_w={1lK@77yyZX%>;W>V`B$<`qwAM zm*J46ycDs>fZ$m%?H%+W>m!6j2dvs$Sx8-{GIO-OzyYV;ZEK#YRr2KCCkrfI2wDa@ z-2HJhEt&Jf!$*Y1217}E4QYg{=6*x4cuIOzhvmVMoDuwRiseVp%?i=a zJ6?~{=%q}RYCZ#?bEPe1!_mCqPp$iOmv+&c7E=7(pt38Z4a{~lW!+3~?B59bJ6LvpE zbo907qg2GrJHl;*_KnTv{v>ucwQ7yCGu+qvR0tzkn_DLd$?DNZHRw7SSaLcPT*CR<4->*r6F41cuRGSkD*rv+aLab5W>wIKDn7@27MfG;AQGsH2fKq_g%*k zEtq|bZ>W1l3ab%FJG@KNjA%&arABxuL#1rs=lS;r&upLxI|K-0#-+p9#yMCZRlOuS z?Q=P>6gq_5Pm=B^4VSUg7(uLLvJV1Mgz8DupjF`hp7;&5puM&PLA#PxS^BU(^TXEj zOxAC`TW2&0&G;Gav8Q^;$@wSwJL@Obdtunj>iwP@^1mgY;J+s3>qA<)cf_G+j9-O8 z3rJY1!86Vc=Dc-LYF@VxhAxOM4MPnEHgj{ss|=F{o5_v6pVlhr00zK2u3_J%l@%tvpv z7$3Bt4fbG)Lz}!;6osXERpOrQhpNo;BrXg7q%yjZ39O_jV)A~*`m_RQf)A4g9qzHF zWd7)OM;dL81Oafh$eeh#1=Owxy@x-tWo(TrecWt)x-tN!yrDUH&QL38X^nUnN)FXi zv?XW+tJsPiZI0R_vrsFOYT877+G&n6P4UlDW^9*&gw+l?x4e{jK6uby>dKb}Le7sN zEas$j-1w>uCDOC)(9ThkVyNy|IniWmOwkCw&K+$P^PnRg)yO@?tDN&l@2tuuj&wHu zFkI)+zG9@zD>{|u=;+h6VR?987TM}y!dq=PaA{kZ)*}X1kO%EiibPja2{h3s#(AYJ zelbC`pyt5?kBslGk*EvvRXHUXRC|&e;TIVz~5yL*&L}heXF9 z#P^#_zH%M7&Z82yWL&rpba_281WKxqUUZUl0bE2=ib6#-NKy@TR+4H2-^W)EJ$^v% z=S2J4^@z{zD=+xs(_m4WTpZ`U-y%-o7+A+M2E#}gtH;s^q-_Wo*gY{dQn6#5qswaQ#h&csI<>XajZ9Lp zvXCZ}TI|cdSJn?XVanmWOyEQ`aBH%-Zj*vg>w_9vF>>htp z`(S1z!s40cZnfos_WX2|lb=6|Dg{GHVyLMpZku3^amE~yFlc;5%y|UIo&aN3SDUfT zB^7&Kkgqb}n1CisGb6o49yL5^-vyM=_F(M%G~NC@SMmIK=X}_@u#v&4i9btDRHrd< zHCSgdUbUaCF-NI}GnzuK9tcCpReF@+_LYtJo!Kq{rqA}&IjQ1>ZRB*zv)t1}nRAktu=|A4q zT7Ze`&v4Wl9a>5_jAnn+34IoZ4PxRrl(=37QcLboD8E?LaBMwD)96FBzy;W$X;>O@c zJRY5%MjEPQ>z)uHxj*$n=vCq2X(zKs>!eYj`}j63r*;KyscliMa9}AL9ZzVRl*307 z(LnT(`_T>Q?`H1Xz0GH1w&t}vp5!`=O|_^Qf@9!_MAVl=t9QP!ITKA@T$H8j^ou>C zaALVb$qj*rbrrmH@v6D8yl~;7_dPIRxz2Y49!{zTwe@;*V}@)xPR=RxPL^Chjw{)F z**$8hKG(@fuA?2U<;fRyfn(a7*QPRXwdM}N1*$FzYM${%QBn)jmn0qL$=uO#J2bYs zY;2?7({Wz`^k6-tPs=WLtDN9#+p;eC!tzzn$DYZ-#@C2AN>}_%n`LL zF%JPdFEpv7WZ)@Tr^4Bmm(Es2i$2kW0-LUxJ3NP*4F`!HW`92GGhMN5g*yDyHqR7}SHUl&yw=Ug?S_VTS4Qvea= zJE@H#?iVm#8akN>2%m>iBG7umMyr37PbZ*1gyi8`_q#o zF1g8;l!Zu3WE(Y>8I;$f30uxUgzEBCsc_RZkgYa(=Q*MdBw{Ndsd>r`psK~bqn-D! zq0ZYYcA82z zAKpF%%PHGb4eCC%8B*epYE)3-k3zL?UE$1Ev{tNo*FXB8Th7oWsHszC(x@v7Xa*(! zR#h`0M_{XRFOrz6u&g{eD(|USwRs$86yWB&6_Q93|Gfo8@d8OENH9eA0J(Q-IM!5o z%B(Z(($*2Pet5hVq5dgRP-g8?f1{YUy>Rk$7hCTK@#Xi*n!}4Ps5Zm8&ufb+&Wt;t%?pR_%t5^b4!|pOtb^a%2y^?G`qETiitOhS7NwA53Qej z-f?Gc8kIXOntq%_RkJb2C(TDvlPcm+tMlB7&ndZsDba#sr^$0HKM>8Jr1mS>C)znM zpXF^ztYrdp=o$L@$h$nxi%*S%8Dqz~&YAA{7Ss$cuG5e6WYVt;rn;HJt?g`tEQ9Mj>m&M2BCf9 zB8QQoJXqhB!@f}61D&u~pG4=ycDd0sEhi+!ilZi5&hJeqtCI?v7dqrtm}FN6W5k}? zOlD&;Vf5eUFY0h7{q&c`9}e=UMH40G!pe10cTP#d>GIy!TF<*&$3lx9o<~G(4ZG{U zca?2*qUzoLSTZpnw$4+2S1yW9g7uiwF7&gDRMet*|LjC>!SLXxPz>)rqb=U*w4tOV zsoG**UmiB;YO7*e-(vXJ?TLRnH)}@GBH%)~8r0&__^zLpTfqMbMlVvw=Xs8?z z&QKmoMTION*NN@Pdt8emHEO!nAt<1N=jOIQhPG;0%{T8gORI==>skq`u-alfRD>4} zU6CD;KQ8wjnhf03fC0Kv(+8W$-j3?S{G8T1lx2wt-IgFCP8_@)8ho4NVyUBGH@ew z%|p$!%`0^6me4lGiFUZ?YYL`9+0s3SS93~4!0xfXHI zUrsc}<|Hm=h>xam6QNCV(NCBULfeLmlnew8v`nu)s_b*n*UdO==APe|?&ra4q&pY~ ztV}xq5`wulE~MOiYJgfq?eYUFH_qyP*Reu{y8`_iOi>WfuY0+3r8ovF`N_dG? z_>!Zo4Yes~o@(x~s!A1F9|5}Nn~P=~##E<{74Q!@_Cs3P>r$!}YuU|M_ie}kEudD- zTQ?Jjt}5|e?vpMS-ln2i-F1TMRL+UHO?6k%9BeZn!G6rBPHjtBS64{riQc+p{;=rO zDFJ}8qIJaz0L8toV=M0~$6_+ z{A~PUd%vOWPIR&fTCjnMVRRhwk}eDsbPA=dwZHQ z@io77{iD#?X-tGjSuK{Ql+d6>gL9*C5=I$pQ8C%hX%{-XuxCWnRLz+5xC&%cLapVZdS|6TKHPUiqFeQV)hk2S zALQ;t{unm1D5`D4H2@5uA**c`_hyXL;-r!?u;40*RF)cix++Jd#DmW|#d!D2X%0P7 zHncj)IT98S4SayZ4{3QpzG7OAc+bH4PZZNzmqV1YE>(IPGYMLNJ0EB%JPH5?}V&m@_+>txnTyC>`ug|72g&JO1xP98x+U7j`7P0pxzW25Jw(HJpZLwnmg zEok3ubc|8AB$v)Dm0b^Nu2NsDM?EUN!-NcXe1AU57^q2zwE3`=sunS$s35Sc@T0W5 zk)ADSv|@`>kG88peU;%>Q)5J{67mQNm&!_ zf5qTdX=rbH+J)sc&f)IF$Y@Q?-sG)&(Cy{Vi(9G!Sev0cn)AmcrLRfv_9G{#OI)?k zvfpJ3`F93(k1CFrB{v_$Od|z?yE;&TpqpW%kOdFW7xp3IK%7w6; z*+=i>&D-bse1-FYv)p;KsakecGjVR9HUaN+t@NvG4v4bG2v=i*-mHWmadz-{Rf3Ib z4>VZoPi8C=(sL`NlbwlcoHD)GIcQcG{Om_)R;4%ewZ)~CXa{<7t`#rO@Nm4<#K%9e ze?GL-P9#)cU^AT>;zOn5Kp$?t%g_g$H!YNycP3I9%k<#tyxuI%eO{N$set8HR=tqA zr;0~?oXl&-vrQ)(a;?+DY9z;*Qp)GN2@}IR-HJ-`Wv!T&9OhgdC&szjZ9k~rUQ}5G zb~-ASY~kga)-41&O22Gr@+<`D@|Se3YE@HJKX5#JhLAHLU@4b3#5(%6fUj|=%qQ=z zd+lPN4RMB)2OASQQf~k4{zph@u|?$C2&cu|d-$!jeyq?{Tn($+Z-sCAA&r3TK<$8; zxMMuD*jcggEOPbZ#cZlq)20S<(|qkUUCoKJRG;|Mf0gX7G2?Wk&f<_u-SdupEnj zIx9FZ%5KrXC;DKNiBC*-7)?CF4&9FjP%VllhULm&4#WhU{0ZlC+Na?Nk~7P@{5~bm zpteD!Ojxz85zY}i*grf5gcuJojrm!cKZ0MD|AQEkE8B8E&uzH$`O!osQVZvocri|h z-P$u0S?b6LEP2;ooLz8O{h6n=r-y4suC`u#Mq&3;p^V2LpfDF4$Kn^ci7hYNMlY)U zIvscD$-&(I6|u53U*a+zV`b{dSxkA8Uqlz;^2RD;A|)09_>9cDe}s#uJ)7S3mQwEi z8%_N+loFYGkF;k565LzN(nwf3GPWRcb1dm4o;5AL0^(^1&}Dj ze$Xw*El?vTl4uj97~T`jI2-twTKmPYCq5ZbyNV~%{D(&btcJhR zmd&&KrLp15j+~SDNCe9n&;kg+SpTND{dVVndd=q{o`W6Vr5MIr^8^(_#PVwK*>z6|yVKQXA(Njg-$gIDqKQd;iN; zCjNdfkN5}x8->vh&N9HSh0H*IV>8JAb%X0gkTkQ0UBX5IF_o~ zmf-xTzm`gtbg4{qQ?pP(xjX_)Q3?%mNu`fEE=y33C&HI%9jo&47V8|+?0>1pORI)w(S zis~I;s)D8t^5-A@OqP(qUWLN+*Mg1H&pMc)bom$|6}^`sb&AOST9lt1lsW^Z`^N0F=`JEUaV`B+N2Z zC9S>rQ!X;sR((SmS=(lK%Pr#R?o)Rqcy|@csXmsbsxe0iL2h_#X`Y8YZA>Pynd+ z0qRTR@44gkS6TqJR6qLwn8GkMp!}20KS=r|Spi#AzX1)Y>dp%4DHacq7iH?7uCCPJ zc-^_F5Bc|60TqD3@p0`xvOoFn+5hU?E3~f=|0}Ug{+`%?eE?H0`TqxWf8=b&pQ!zj zudfWeruHi&e=y+wAF23?>}$rphWf88WBu9Y^l1fh0l4DT4j`{z(RfY&S5E&x;~LB5 zwV(Y_i7z$sdz-K=FWvE9Rs9FG0HR(?^EKW6D5X|#-IsRzXI{M&>2Jc+1*v%H-~TG0 z*MbM+(5v!SQd@+A)vuS39>^c>8!jiW7vH!M1EvJQg>JSgO&mVQM-mo9E+j6*6zbQi zTeVnYed(S5Y5{=a{0ouSaG|MRnpFGTH;b3X`L71>+OPm+@K+V1s=l--?~2cJFJ1Fr zEdbEX{^Ijhma6onQ9b<+F}#MaqW;pVTAl}PE5BKQvsIx~gJl59jrJ#CJp5MU%JZlD zJ39CK5Akomx2$9UCLGQE2Y|n*rjN*&_(lse@_?oe4S0H)Xw6t`q_3uL}%%kYXrKq5rRCMxgLPi|v{Z8!wJ> zpUuMrg~|9|tNJ8Nu;AAv4HC?>n z^{LvltMm1&x5v-e38m=g@~7?$6HZT3Xc0uWk;vXTra>xFl6Ln>;KG4auo} z2{hx<)qSYees`sJ(@;uiW({i3qg+r@PD6&COq1cBVID5}|c zls?-d^(cWD0q=oMphR^NTnYIlPzZnC(oh&CIZf1HNEvc!t=F)8Ph|qF28GN*F->-2 z2kkuj=1-p@p-)7RV&EcFt?A0Vh(=qCC&&T(h69@Mkx2&`QX$o>6MNPNPFku3TGfQi zo`Q&Dg34J4^5-db9grAd`EKONHH4-MavXHgs{9p&Byt*9xbK#E46TaP14fREkIx(m z04L3v*5o7+IvQJ(WK~{9n_7L9dDGmGVoYW~gtYf-$|Yp39^Sf6b0~eLdSUDl+j&e8 zIV7QUwgsW_Rj6?*VYj5?pH@>5vrzVU%HX<`q*PG4@?a=DpkrJQSzzc?lLbo!8&36A zaof#qH;?b0j_{GUD?wh+3>TGy38)89_ZYrKb)FZ5HuM@oJz+EdiTZP9-HGfyZ9^8pY$*kN@jRwc6mOGf{NlcQH;I*yh039 zWsPCix6GZsuG^7g53z665tSVQ|_dVcTaO#DLnQ)NvWM2|JZV|4wx z%6C0>4!YY}##@GriPKM9LQnWCTH*F9f=_AFiO6!V5pdEZUJ_a1Z;AW{zgpp(Uh3XDDr8!-E1@WjmsuLAl*{N&WiK}YEHoM6wgcW-vkZjiFYdZ)O>QqoGNvUEV zM&2~BL|iBna*=wGI|qX&%Q97>(PF8Ff*Q*Qt+veo<4=FW^p!W>3%hxQgi@kq6&r?| z?OXu)PCqDr)TdGp^|mYyx*TbPMF zRV$AvzyzrRDwGXGE!WEH-`9LJ=dn{Dm6r>E^gBT|o5T>b!c?|k{5+d(jE780S5+4# zU0{iqno*#bl>r)Xncq>UR4c)NX?!AYw248$G06#1CaYR#0w10QW5ek5xc&2I zazt0e=1x0ipGfH;8=<%8p#*dm1~N z!nvMII6@_qUkm&|IzZJ~R)~OY8DviPZkf?VNyYePeCP}Kub~7COa;J?(}B-FkNAHg z>!gS!>a0Jr_AvV(QvZcnSgT+kH=r#(syM5vmH+Hh3@{CrHW5)I^}-i2My2l4qPHq| zk1V)bxKURogWw9MCt?uZO0dfZ9Mb)UzW(WQB_UemnaOmp@%XKX0n4{7KUVn+*uF@7 zEdVwYYGH?_MZqS?IgxX#1UZx$*-n0(3_+yU=kRWG<4%t_U#~qNj*zBEf6wMfZZ238 z=b%4Hgyp++1JV1PIS#GWVYN{#svM!VEobL8fJms+Fs8Uu`yOt@pg0IClqEPFt3nZT zzBlSJ;Vf_N)SKuTYBE%Z4A+6yG}4opx>FD_S3vLpCSgziSwvrZcnl{s#Do5aD56;b zi=bBD1Z3SeRK`Q1ZQBv^IG#@NEJ{O1cID*}CsfXg1dd({W73--Kc9NlLL*BTlwz!5 zB@x3xyp^16gC)d$frS0c$U|d=H7@pk8f0~t9L@fCjO4efh`n5-@1w?qp=uU|t+zJs ztee`NmzL(Hx1w7>*)s<4-m`8nv_NYJ8q~rL5KNp^4PX~H;>P3c?e0H9QAY-o&Gp;Y zA#IYeO?uY#!dxk0@*??~4XAw`!Wd9I+N-1ne)0q&{rFZp?E|UMTy$JjiX|`ejItsa z1l?HJVS;3!h6F^@5A5j~CLOu{osy#v(;lyZawKZuNK9fVNTwgWfmw!=c07$ss9g<6 zXShh*Xk7L#mNfqSvw)9!OAOJG%mOKb?=sg*?r;%g?x)M>)(;4KXA-YV(W))+z8*U zIR|s+*>8KTe`nU{TM63!ys_)r$hRyrb=&t0 zxO3{iKOWo>sYsRsxD~R1>K{KI%=G&4;5Z$dR0foQ6Y?WIf>mEbAtWEc;(D`MbM~p) zvbhMxj*#%=BM-Ah@6|VF3Y0TgD!>sPZkg9O_euN9x+U+aOJfU05re@g5Lns$OVv2< zZVeF&C_ZM)fGHKAadJTh9)HN>lX31X*CF+T|0Lgxqq4$|*&CrI$c&yWI?bSjRgxU2 z*4$ZM<%60oPAv`Li#RJiTS#tng%&_5HPG|@XE<8j385;*4xzW&KySKf%Bs)Qa5=k7 zf4DVJRh;CV5QNC*orUvawgg(#=~i;6&5o5$k@W~Uw&iPTa@t1L(KudUrepgyI&UBH zq*Lborl(W}k`7f%xjwr86c^gLw1cW7|#HXi0v2)KYmblAP-v<0*sWXEIg(*-N6zzM@xPDN@RC z_Nbfr<}J{=A5zOv*e8Mc5V35OC<5&3=D=QBgv{WIKJvSq!!;W=3gH2^L2veEdckrk z_&(C$Jp@S$cVcQd`*jW$QWvq>ZM$3`;4ywF4sECllqF|dau~hsph?rWZf&+Jdx=lj zoK)_x!%kR1Vz3gcQ(+NULFo9CWOw+vrwX8_M#4Ea=|9$1$BiLQNpckK>LHy=P62lg zJwLx5?c)|tthGcCde^mz?B0;<&S!gXi4t)$bHk`1=11Qs%Oj(Hb@z}4VLoS0dYt8P z%e~WS9$c#7_lWEfil}%Ced{ir;TYc0p-Y6!Ym<(F3D;Efs z5TMrjsO+J(bV5cAwxmkuR)8mDbxPDL{h9rd?MCo12w z@?!}TKr@O5au^8@)D`S>`8)#sswhNg<3?$%{aGrQufSZ9swkG+9NnUhf7xnHQb8r!xCwq z^#`rA&f8VgdN8IxUG%B|*n(REp8UJlPV;ELQdp8~Rn_%3AGJm-LvicDeqsK*`3J2Z zmA{6Tr+S}kWedHVs%r^j^cSNqa{moMIoChVHRjj37Aq5(%774X z5`TwJv)aLr#3n#k;(_95V>RP67J=!5imkMCt2pz#^4YSQ+8BO9@*9TM2{ZH6;r^xq zbv49co|zq1AR_5Fq|)Gr*eN}}(D%~8=Pi_tOt4!Qpb@;Iyxu8zVarWe-;haI=)Tll zTlFR(vzi_YP6_%_$5*AeKh$CGXu`Do5Yen62~jL)wA@RMT5!iGD9-y7kH`%h&L>1e zaa`r4HZ-eas`=e_>bteG6+xIaVpW3Vof3S$aOe-SDU6{x=zHE?A-evFjo3BruX+2s zHcV!erM3lUgfR<^J4;vOmYrX}##rCC!yv;a`?vmp`-vLwQJUxCU`$$3*#V)yk2-6W zIO0@2yuV7M84)W`{T6LN2=Q$$y$FNcl!`pfjsll#=ztyLotVj#;s%tn4kC<-?5^#V zCx!xB>J|7M?fTkEn8a>h9pjSqI@Gyv(8nx(hfxBYF1&;+W!c2^{O1dK9HJR8mr9k1r4K_BYUWO71OmT@0A|7U}HOXSKlO<8evc(p=>X(1bUnnj71lxHAv) zeZDlF;ddN3JOund(%A2Ajn72f(AGyUiNeqoklLvAJ)8a*Sbt2dr6Y4}F^ry5EvU9n zT-2Plia0{7Dc9FhkY-t#lSqNJt@mza{pqex0jBNA_+mqL7-bHiZSFUl=est2k*mBb ztDcYNCu(|p+O%pFcu#jX+v}$ldWlOVYR@$6_2m-Njg_swz^ zR}HKW7cpYqF4HI16({BGtE)QRchMXSr`EC*WY)WWyyWHH+S6}8KDsQ8UAHaSomjZE zT^o~IKkXtqhLnbTw6C_KvwL|xo`*|SBBg=S6N(2R#rV-=ix(oL`0;+5zV(vYwNQ7U z?xnfs_PFLoiyNlm*K3Q_*EAZCS;7<7KN$ zD6Vc$|Mh-k|C7VC-q7rrnv1oLPy8B*3zUFhToj2Bl!##bILXDEg4tC|Gf&vinzkTW zczPoz_KjPY!4}TTwtka1UcHS*XDC&l*fmm6C_D4vipyVA=kVrXxB!p5FNX33++3*ZAPu5aL7V13TZB{}~80n3>wFJ|d8cyW; zJfr&_J%V>vNY$ZaeG(B!grOt^6XZ#hp=1Q{-yb|aCalc;T)c0L@&zRokYf0)ZpW`J zD~cORZsv$N1Xu;G7_C<#|jUM}h0uJhV6hQ$PLH-;;fuQ1kB;o-m;{Gh+_{MaOxHO50RM(^W z(f?$@F;ZK%IE^__B*e!w=(Bo|uZ#F6VR0WL@z2WQz84BRigQ)Au0?hwIB1m6IfUQ_ zgm4>#Z;%L~VhF($31KJ2lBIMKySMWP3GM#biDf8&6DGa-kEqUf#l`;+sv{`Ck?#oq zgCi;*0gfpDqa%{bR+`Fk`(_FPD8fQ-y9IH&g@8!}kw}D~^8~T-BAF7K%oL6)3km)q zjOE%wCv{~6un7c^Dg=nrD4^gd(19r6qA2kF+~Is{O=WHxs-S;Z{6T4G6i~9fD zaP9nlM{GgLbt>DelG~y>0vM;@Z_{feRdo)p1SW?-?6=8P?m7jxWEd!bvIY5D%vfzS zKe*E{2l?O-{x-RHWVEaz%fJ<)h<{7hT#H%jQPm0o^zZ%ONnt-~e0PN-ED-T~=*|oL z8~QqZDf$tAo3<7!wYOLE9{*GDYk1TM{}g=j?T0C74@tRyl-O22zkGhSy87i##Q*b0 zklGRwJr2N2Yjo^?Jc6+NaRgbi&V4z8s2y;tw?RO}kiGF&mN1=ODJy=b&HVvV)pB@o zRHDT58n-_?eloNWX|3Z!8{l6t89cbPMBJ6KDO|Y<^SPkr`p_B`%y;K~Oc+WVJQXnI z(y*BCd~)Tc0&QYjtFYDHxcK-1KEHm}CV^?613aQ*idATv&!TD{S>ZIIZTJ~oCq|X# z_%cA+USkTGuGQG&Khm&J>V4H`og~w5G(U`*Kc5ud zSkQ_@s;NG}9eN|OwRA478c&tcFx|0diVb*7;6n^;xuU$?$>mAf9#g2qfD`R0$KrS>7`0Sf;bzUAq=r?WHhreOYsnmEgV4aE$-sF8lJ~Zl~`bXnN%U9R2G>b@)9!V2Cb*N+Lw{DZs z3%Z$fiAzro+(-2`747&dcxoRmKR&v;H8!pC+Ni?IHT0<*&yKd2H_YMp4V|;MZ=hMr zjqRQsS=?+!R((0&t?<51JiI;In5~v`ZCtb(%Qy}F;xNX+rqgEPih*-4S06fJpEYbdsmt4AHcMYpUZqQzoFN@XWVbifJouC+SZTI^Yj&;WlP%hH zy>RrdfkXN7r~WV?k7*^wNUuE9YeU|*XddqjBf3ibu(ZXh!dIu43uwzbyi(x;8ku@J^ z5G}F~IhyC|%V3HzzZjhq&QV^Td2?fXNkV}uD*P?V0c^#=o;4bd*@y8Hq$dTMgeXFq zL?CANd-GvP13Ev4k#~9LBm_F)n1~D{I{s?Q+ToKk7)WVvQWE89VxkCKsC2>!v-KHB zf;0mBY;}?=b?R!FF*W3Q!k~a1L518K^j*)SJJUN3#t-f$2<*k#yH4sbfNJ z`b5`gjhQO-Zjc!p2_P~uLbB9RlCF4E;fZ{IZ~hUr!fdr(E4{s z{e!|+C*BZ@@$0#7`sy~tMhtc^BaC%Gg&DDbUh0DBTL=-Pf?izUAS-bwVTxj{4+B** z<&Nm|Mn{7k_lt7G!joVgR}-T>i;VNsv2`X7ZcRd(fJey?xf99tuq0O&Fl8l4yTtCr zf1mvjx7}FwmXZv4XUi}|;Mz$PQ$?EWdr^+xJCMNw#PTo_GUO*^h0ZKt`as^?5xOB% zl>qcusKCw}Ma%B(qA&(BWIPpx&b&9qQ#6XAsD^$LDsc>y;Vgs6b01Q+W2l6}JBFBVG5zb~>sLJd(9jCSW=HX&zuQ@>YBUVQ19yb#fMsm^{$1i~|sR!*}zm-4EdztMAo-&zF|40q<*-zI? zIFiLMvNj=AianpUIiQEwdv|Y&Q%uYxf=;&$U+DzFUO;{FYzSSlEie`lJJx9N%myC9 zKi~u^IEFEYri0e|v%mN4Wb=u(uohD%;}t(IqE_LynBr)ChzO&PJ_%hVrtDe+)Fxxh z&;BnxjACM0>;*lNMatB@K_qR7Ss2q9IDA~3Pp4Zqsj-`ZJ+$GAj`XZn+j+*lj;lh+hTNM5G5q>sDk^g1*- zWzs=|u+;(I`JavLlE2+#yWH+mws0^X4jO*!aeutas>$H$B=2P#22iK|0@t?~=!7pF$lC7DlxwMcE zsVG}N%y*(M)VgD($RXiW7fS5ZtZUXjf@acpSc0+%=*ZF?h}#7mEma(fD9LD|Qw?ZE zuQBj}_}@^*keqHA1dyA85-y9x{jlFSiZTQJ%q|3l%%EKy2cA#$pq9z+J%uNtg@HL4 zg3f?wArulxE}AxMG}I2Q=?QZ7aC5WJ^<@n2>EcIjWX8J(UclFQRBzQQFtKiXJzv%E zwcU;19|cx;KR<*z989_BZ|LznZS{<`Kg7GK+ggY0>hZdsUJRUzWj@_4@4_8fMO?|; zM0KmX%$-I%hxSzRLwL80>B$*j5E@8iK{{|NUmF{}sh~%2T<4l+TgQdd=ml$GYB#Z6 z4!zMv>KmTRnFl^*66Fr#hW#k>zuNoCuDX&f+Jn2hLvV+nL4!kZ3wCgKcXyW%+}$05 zy9IZ54<6j*(cSmHzL(qYAH4J7>`|k}nq!Z>SJhrsHP@P>hN>={vIVDu_ba`tg8LI} z&RFCL{*RY9c`929i;-0#mlPtQ!is4+2gU0PApKFZtK_{kM+`W&6br&`&Y|-Hy{54w ziw&UESW6VlcZQoEpeyPvYTe(ar9*W`B%&qp1q*S{eq1KRyL}Yn^)#Bx+_-e`QZzqb`pp{E@xzYikhE@%_w2U zGGk<+QpfIF06}zDj%0@}=j1k_8J0T`a=cZ~V4dMrMp^I%lBSfn3xIsbNK;Ru3RCUv zwx0~LlVLJ@bouepUM~(o`uz;-2|)xkm!N(`+w$*E*bWOLHLfxbX5eaucrBnuG&TCl zyp*asvh!?5)ONwpvv{KFE~~JboV#hoSC9k*Nu5XFW&$Bt zh4NO=6T0Be-rwg^QEJ8*uIX0Jn>P|(wG5-X+FNg%A5jg?%!fbgc^fXnqx_&405b~7 z>a@w%K(1cN3@@@*4j)aoLvx?rv-0U4C~?+{ZLPceql)%QzDr=?3DKTe1=c;V4HGB8^SYkA-#aC%KW}bYh-hX{_{naeF)x&p) z;`haVhHPu~E(=NA=^#WOx1h5pcY6jRZ%d^2T}8OYd&yA-x0x|KLm`fXc^b;^%R z;S=!cLWZlyX<<^=N-iuES^9awj@lTRQ{|5`moABs(=x_QWz8wYFc7i#F4VwCp~No* z`|7;E*UD#(y!Mrx)e^zuj*nuPC~75?2*?hH1^R2 z=MEvOK^9?CD}k+x-4$+wnQk=vOy{{eqG>j%SfF|ulqTAC&hAkjJ5apx8I478qLF&BHVwx2nREjl>Cn^xslgqq3a9t%mNnwn zSPR6{weWtiHNNyq4QN5Svc!0hpTeDe0-t{DC3Q+K(0toHcRth^nyPTc$k(SL5OcuH zJ{D&F?g~3E;UFT$Uv8npV`vWPUy*9#U4ppK;d$8pRP;50CDzExNL@`NJ>}Hk;Reyw zU)d`}y=-cxe7#sC<0xeq2<3aoL#}0a*xv1{BR5Q0TSVP|WU9J*Y%x>d6a?X`8@dG9 zQa%PqBlMeu48X zSYvlq_%Wn*bmi*S&tZ)eI8sckd}xtfiwe zV*@fjz?_*m3Zta{!s1CMO^|dO9*DqqS;?ho!|t@^Y%GX0^Q__ z>-^nXCXtqqYCb}K%_xW-!PL40D$n$^`xoz^WN(w#oWyS$){j^rrska@+<5`(8EED*6+EuR)nR1rP_lW#6oZ+X)oc~Gk zq;yr4=iN9RG%rg~=4M(rX11jasnVeRr*FTM$5;q5rPcS{zJ3$sVR@Q)da*KM5&uZZ5kv*fiCI=%p(-c3sfXtmQxMSssNnC=*d4)#nJ(^xDYAY==#>E6 zU8!%(X-5lJ`45Gq`a(q8M$iTWUKj$ldGb9I%NVR&gl29B;@0uKPf`l)oG&w4i_?6i zL*&z2_lW2-Cf9XbIU+C9uP z4iEXJLUO`fbwQ9c4knTPxz%9^L=diyL2~<7rI!26S@Jpg_1P1(cwFSJkuGm|l5_Ie zYzb_46Ngwe_;F8mEntDMk*La!5ym02%aIxg7+lY>WXkz$?Mrt;!-OR?<>&b{MH2^! zQ|-!zU+e*n5wPiA2k0l+KKvNBw3_~kxcyavn~^1ja;Awo=1fi#6uRLZD2CGJ4b1$@ z1d&ruYfPdC>?+sws@UenOqh&!y6bwV0g4Mm>&GQDRmL$qcvnDo%$^H2hdrcyYkay1 zJ@yd&1!2Ogf~ZeO9@8Q%nQ90%6c%MYgl?JF$Hlc*S&J*8Nm2abJ)eXr@)a5p`vXWY zDnQRzt^$w9(#s1fVZ_Wq_!)Q91s-Bq{S>s1Se!Wa0_J>HR!>N!#s@bWHKMD?AsW?8 zT;hecph=zayeB=hf(nSkcuza}+YF>U9it`BbQwz~CBxd5Kg;ufpU*2PP8(nHW0Q5{ zPFL(i@2kTVSbrnX}zPjSnr8LBIq*G-ee_xPLYy`CF-owj|VTx z{EDg;RMwjm9{70mJe9hT?Hm2b%=Y9EVl2D7-cZ4E%Zn$?3xe#mtBKuPkFgB^Z?(6F z2ZXozNW#bGdAOdZNLGTkI zBv0jQ+t-hR6n@knkc@!jdd9--@IAF)ZYP;}M z$KGAo5h`_gzleKbMD|zx-J}untoCqF(PiPtpPz5@f?z%C=P>g)39F1R*@b zE2}s{%1&4BUu`LiSg7xB&Ahi}@mqI=58KbNFVYt}3MahS3v>Q>j#RUs-4Zeh_3?RT zI2l{XOz+c#Zo(0x^3(~9m4jd*a5KXYIZ+;Cp`o?1+_%(b2iFYM?aMDkKgfv=N&5mO zinHRo#UcXhpS7oQ-YQY~a3WopRpq4tZf$l+z1pGo;!#WFqkN(Rtdz1GDS@-q3t7@w zwF|_}OSW`m5DD1#G3d=zQMPb}l->40M^&XZI=a05cWdyaK-Jj*{q(@<9cILX@`^+C zsKZx^#saMe#$$-l8GV3KWN93V9O^(#aHkf&{IiH#_iHT6>ikH3B}e|q$;C-!ysd** zpTLfSGB$%c{a_(!YjME5N>H}&*o+yDokdR5b)DLoJugLPcmI2<(i{|O{_^c6k`dNG-P=ONEmJzr`7bfmzz}{zh z7?@6$sdf{*vTX?&@%DGxp59P<<;!h3Yzoj)C<-vV=?q{43g5H)k-?oMss+hp zKHKtGnCDiL)N?&mO~;aJn3@jR%qSRma^m9PGG08$5);HdHNv?%F%D2id?)U)WED6S zWiTK_R4jg*!It@sYI~!F5$`VGJ1MHobB5MwK-WK#X_*X`ESfqhNtoh<5l1Pxa(;ym z?5s#jc2D{RPBN$$(Mh|yaBhM9EqThYM3fK0(m#`utIIHUqaLRK>aEoFKb)TrKPNl> zLpsZE@eOsYdj82uQiApe&m}T8lMltQTmhuY2Du# znJ36ZkJ&B5LD`!0e%Qam zJ~owGzN+OdnanyQYRmO$>EYnv_#m9#5H3B+AvS-{#9a4y4$1oEdVGEk6V_bOy^f7O z?7lRe08e^UYFUe&gW9NHjc*#lYm}1PDFctUMo~XZt)_PVH_`EkLz-1F747tv$2jr66P zNOg8pB|z|lWV^1&ddR=fm7($( zCJ%Eyk{rgHztY<=jiFbL4~2?E>+mTd)isBdCFv0OJf}RpfT`A=QhMO#RIM zQD2jy&-+YFZc`y~PSx;KN(ptIim9BYKy~0m$@;8 z5!yDbuUG~gReV#`ByDSMztU(XJSSa^od&J;^3l~A7Ngelawv$iX|#Je23V)Yi4-c4 z8rVDTSYU?0MCIpkF9VY8&L;Cw6T1JGq*I7|AG)@`^U0MPFEj6ecrnBb8G07>b27G~ znJK2Yi6XSAF8T?T!>`cLJlGDjFVLcS3$CfXAlC*~diEOHX9rJ~p8GuWaCn<^*P$U} zhVBj1J{iaBCv*Jkd`HvX*PCt6UMkA`xStK0WGF$sUae%i7u;KJkCOwc=apN68JiEA zI1@Vhq-3Sk_aBB{R@;4SAD+&RcLIH?Z&8_U5N(rJ{e#@e&JEOC5n@`sDQ}j&?k`T( zk{dTqFO6Sl+#mI()(v%I$ zyH1DSD3Qf4d>cI0otUgI^8jA502X9VV#aE16wgY=kbOpG5Nk!JfC=W{Dj!Sg2C{69t}1Y6G)Pb`lb4$_#^c;0aUn&Ay{3<8+zM z=dG)(`)N!EDYdRAfQKYh8(ID{#-7dN{pNYsi>c=|Tv6^S*wz#UbC5GCSuuc`s)HAL z2)ydSM-F~70TTRCWFtdgU|REqR5;*t(EEsGo@w*C`u0pH7Z}|a5N#Nc%xCzjqSJ}g zV|smRBV55IBGgSviqyPKnLkX7KI}@IV}9fE)Lw6Q0S4Wu@y-IFC`J9`!NfMtpHHa{IguGxgVmgDTZbch0-SCD)ZNtuS%9C# z46_1N0VplFZlG9%Vq#QzmoQd=YPMb*G%iEn&~R>PFRERioWAfF~sHOGr5+d5$W|w8m1w_E(2lV2}BjVzL4;#diJ{EnpW%?vszh_nsP`1u+5dBQ}ITC=XVbc(bn)fpXpB_<`)Gh`oYhzzI|^jrIjVC<+~6v#4g9kMp`p{J0gmI9OD zs1B|&+h=5d%7W(5-niSKL515=-;m~G>2V+75a1?Lttw}Ku4ro~A1qU>E|)2e`f!Z7 z+k86Snl8W7Ouh1fc$&3d7$#SA0J#p*{4y)(Lwd)7Ym7I{0UH0xV2jz5a!>yyxU^I< zL!#`?lpkAcOXWi1P8w$+*cirlOVgHs4(4xuUux;^4iURoj8SMqAMTn4cVdRSM_J%J zp;{ytxea!6K8~xg-0fH!76gLJz;CV6J-8ik>_Z!5q=Mo`M|xb#Z=m0S*LJXuJuPuw z?lKP;-9ALy&e@ttBh-k*PQ)LGnB8H4A!<+`lW?JDraWg31W7u$6pMo8>cGWND@YGEPzLfvU9;>&1SPeJ zOFl~E*L?exF^<(*0%y%UWEV%iac*>+KQ=-&7q9>2jnmcOhjK>s8%klB+huf@e%=zc zC+*jwG>;!t-e#;nf1Wv3?%Mu@&#;YQcnB!}nkE4|!=@mXShP+5<~$3!%VrhuSiM|G zQwWLsg^(WnF*I!B90?)L9S8b^-(5_51thQgKr+_89qof^3~_A;V1Zu?s)-DIQXN?T zfePO)U~mo6JQhI&WO-g$V!+paNAn}>c}Sji_Mp93q)k^m+r$%dcx@AH4O@k+@x`(; z#-V8ln3XS>(y)C=v;1H*%5-kDDr+B!8oO`*7wFb?5Frg1kX3};AFgRxW}GD0_yfqy zR<%3=nklr=I1^)bWS<*_p*(kJlNs(e!cM?Vz@4%c3R@Tz?Fd}N6>Ep!X<>w)N*628 zhXz4ysexzA9sI@13#Hh(QL98ER!t+N;8JjyxJ-LRx zMCXm2Tu1|ztY1A&7-_(}jCa5q)1x{n4Ga{m{O#sMew_V#5Lvr>Z1yL^F-&ortQtkP zw`!OUM+|kv7C$JAg#iO70o#n-=S?YsGj|8HwBEHfNSRsIKt(nN_vous;eKEzAM;F& z!s`X8Tk)YjczG8+myqB|m^v@0IV3KcEeU`K3weWN1=_c0cu3+Lflb*z;;a4#UKdv- zUEy!`pxny+5I>n`#QYNwjln151n3b#uq1!&ab;8Es^ z|MJ~S9csmJg#qK-tHVEL@IbpMO=A?CLmg#8pJc(_TXd%*CvP1B$n<-6&jCD(6 z3*O`q$LyvBBm3no9~LtvNNqc093`*0kzFxGdRSGuWJHAr$DM)8BFG_`?lerhg&E=E z1pZ4+%a9H~&3*oUxpM!yaTl{&`QET}j*3f)bcTli$&v$uw0Gs3s#Q&_=GZPd;Y#)g zACb>lVzMkDtz<+6osUOkkgkoJ*1jX4L(EyG&R1$9IeExREiZoWJh;6>R{;TxmH)OF8{0B~5^ES_&Yu z=%tVkm~pzTTfl;qtG%dP^ z{jA((HG(*&H%V~Tu7c{x4dUcsD*)GyV+r8cY>k$cHEL8CY5Bcldask^7n-G=UI~v? z4Z~2L`^;WZZWi3E5&4fY>j7v1l``^2wq|qsd5$Ir%Y@20mFKNI9hm8pR zqca+@gtL`H^e$I7-Lo+F#OV6Qm(=y7at?F#q4Ec@XIL%T09`%Q*cnc-Sb_`#7>kq= z13I4H`9=4icP2Q-81D1V!^6FkIMd+kJ`{C>Ys{G5l3RFHI2vglV$ z&{0AtJ`aZwDr8gPac)5=`UH#Mj3Gfi9It6=YeUB3T$7-WgVB4r$WR0~0We%(ZWiI` z&Duok6}!O%;e{#Xe-+L{$GWT^Hbs__#W#5r2p;5_k$l;YR&}+&G6fHeGs+i<$|w{2 zA#c7Dw8$ zjGSUa-{?ysrKX@1ui9ESv1g#`SAUA z2BOh}6p&yuSBF{w=S}cW)HvyOHl@H1dq69c4hAM)bX-%d z`I5s@i=`iPd>=;kYHgOyt6gS=7mYZ$8lNy0s+P=0snds4HO%-&tl!COlPox4B z5YJFE!mGTmJc)3vtQ0lwkB112!{o4F`d0S&aXe^54PFOh0KrwMd z7?`-lghS}JXRx_|X!j)}6pAqK)0GP}?L0E{eEyzB{Euu~^^0}dai#S(B-=G->uzxE zlN$e5`!J5zH@3w8CJx9oT*L{zWh%tJX=afAwej(X=*qwJGX7Fw`CB#PPYsrt6lv?3 zKL~t(2v0e0NpI1ivn|6B9s0u685`jL?qBMSvcOvMjz$rj2!mzSIGDxHJ(dy8J?HuD zviG#*lw4ZLPJ#7AoZ?1Gb0m$O&JVx!aJU+-lJiCFQGUE@Szu+6jKOIgw zdR^?AddjOWE3D&h!p7&pLg}2w=Ah zi-u`8zFtXT>&RPS3zCSw?+p!$qLs!ZMCVQ52s@YiQ{OghTXy$sogpt>WCug*b+L5& zXuC@c_kK%iz1##MWR=|HUZIt!uiIZ@C!!iGY|56G*xS^Fwg6NKB!hx1uNa5Ekeyc8yIDARe=}b+!pAqO@@)B`oIe zPe3rixguYwY}1+h1s4B8{A@p|OJ-9?EUdCSJBotB=7a!cv=NY*#q5rs6{_2x&b`D2 z5#@MQ4aL3mgVRm!ek6j3fW?anpWmdl$C0pCaAgaf;(UY}|JdY{@6k!fr)p1yrSi%9 zk6Et<_6+9m2e(BX6}$ea334L|K5oEusad|`IWrq-f#xq=%3H6^65npwO`X@@vRD4s z2gf(W>bl>0=r8~P%D;Tj=55!_!O%|8(81x4?Kj4EZDs~NQ>$a8(Jw1<*t{&&C;J76 z=qnELd9=3s@ZXD9m6P+FzDxy>u{7E;J19U$48{lx=lk8^@`)!hXx@M{JCXE3+2sBz zU|C4Wj@S^rJKb$rALsqVaU0{o{=q{a3>@c#)~?lWm`4!U`>C`O zDHV056(~*v_V89M$bIlxc%i10~}M7VC+IWVT6~8f$|qsr4#4hixhZ7L2B6`J{(Q0q9|P&}skg zqPl6fmsFvfTv{8J4xlc&3GmM0xI)HxIgm?(OcEys$S+YZ?W<-O`v*b1O^*lNZ?qti z4insy<{hQ0aNftA!^NNZwR7i4b7kj*G|oWS(u??Nm3yx8!V8hJ7nsKp2B!ruCF6sd z^&+c{oN=li!dpdn=ohR58^#QjWs0ACqC2lX%gy!Z*E}xHXWh7sX!T6>&w|$+t@SeTiY4_ad!Nsd8j9;7x6C~)LHPLH=!PIC;GU1F!7Jksois(JRg?m>Sk z>wghu@k3?G`8IU?<*G(4zk%x97jN*W|8r>6#$-)%J57LLj_uhFE*t~ZnFJZmcmVw* zANVlSjUH0UBOR9%dPC$iPjBwB?r;D|nht`mBq8UiPccF0en6a_@RF>`Er6P7 zCaViP+EnzslEY{EWgM>UqpcZ66uT2wUwTbGcJHL;nHg)nW$KSwKG6}`^W}&0rpgqW z>60&j5?Jaan@*u^n!z8^WmAMwzLb|%!ECp>1oLgm#J{6{%}IVzcti!mH9*y`&hCxA z;A-(+D3go-?vW9j8aIJJ9>IV;xZW~9e(KB|?8|3(M`=6uAua~y97+!3Zp&P0{U05# z5meHn|IP6{-i`*4|I_hwZEXI(-@QGufBn)F1>U&c$gNoWMBr=sG{q?BkbT59v3nCa zkjFb?3bd(IBB*4B3%oz(bLQK#g1xdJ;@0=6H6=nmaPaNcuizjWIY~HG(>m5b5XG_K zd`izF10l7n7~vvyE=~R3Kn5e91T--xCUuA2@$2yF!(8J!lNS(|>kf#p&~sq<;=l5l zx*J^AUtHId`UBx}%2JLTYDHPu7p89+`3Ii@HNn3Nd2K-oOwo?jpXcW^#g}*3bS!bR zjx6Tet4p9TlfP!=HFRMzH?2ubL_`S$ohA^|R&He!MnpwhPzMHmg1r>n2So6(EzpNJ znZRXxY*^qKYs5@GkQFg<*0aQVpn|A#<1E5f285cF=3fU_%rOX$rv_I_KerUWvR+s2 zZHg&+n;-s`er_oC{usvL_EjZ{G1{DMcRI?akE9x7Kb^#8-!(rc=&V{5nkZU0DT>sA z@Bz@4o;oz()T|%uKX1NL%^^rhe?+yN-Vo0nHd0<6kMu@KpYDTyZOT}lf~ghLDO#hw z{It>(--e1p$l<(TFdTUnvt1KBiiqG8E_vCEk!&5HCiF7kidgsixcyb?>B=LvUE&-j z(k+6|6Yu3udhQ=&9S~6Zw?nRfR*3%hyZ-m}AM~Q%1N^sE?Y|BGxHh~EsQ*x|eQ)?) zzw>X?mA5>Se<`>9Tg~&m@qcRu{%r~X9Fz#=pGx+~|6aOP0_a5ba zU5UR@kUsq*%AZvx-lM$F;{6-t7ymz^{F&4H9_4)^&fh3z;{S;9XIjpCl=lSdzfl%s z{zQ3Cw|)=so(A?efc@7$0sbb1y*GV-8vC~?rS@N@@6Tr6BfMYM{Ea|t^Zpt9<09uh z;QJW$Z@@geKLOuGsQ(zTz6bs9i05xe0HD+X0QjHy=e_xVf4BbAoXq(@%>VTjlaqva U8&!WO= 8.0" } }, - "node_modules/sweetalert2": { - "version": "11.12.1", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.12.1.tgz", - "integrity": "sha512-xV3/YI7Ah6BeP+bXKcrHy1yn6duh8eqlX2TSI9I/rTIzGLYQvnnTa3mOIo5RHUobAjSmacC2IhPApxjvppZaEQ==", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/limonte" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -1304,39 +1287,11 @@ "node": ">=18" } }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "node_modules/xmldom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", - "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -2134,11 +2089,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" - }, "saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -2186,11 +2136,6 @@ "debug": "^4.1.0" } }, - "sweetalert2": { - "version": "11.12.1", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.12.1.tgz", - "integrity": "sha512-xV3/YI7Ah6BeP+bXKcrHy1yn6duh8eqlX2TSI9I/rTIzGLYQvnnTa3mOIo5RHUobAjSmacC2IhPApxjvppZaEQ==" - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -2302,30 +2247,11 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" }, - "xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xmldom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", - "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==" - }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/peripherals/test/toolbox.xml b/peripherals/test/toolbox.xml index 6083aa6..6150c78 100644 --- a/peripherals/test/toolbox.xml +++ b/peripherals/test/toolbox.xml @@ -13,13 +13,5 @@ - - - - - 5 - - - \ No newline at end of file diff --git a/src/blocksmanager.js b/src/blocksmanager.js index 622dd2e..347ec71 100644 --- a/src/blocksmanager.js +++ b/src/blocksmanager.js @@ -1,6 +1,5 @@ const fs = require('fs'); const path = require('path'); -const xml2js = require('xml2js'); const peripheralsfolder = path.join(__dirname, "../peripherals"); diff --git a/src/module_block_design.json b/src/module_block_design.json new file mode 100644 index 0000000..7280f57 --- /dev/null +++ b/src/module_block_design.json @@ -0,0 +1,50 @@ +{ + "sys_commmands_exec": { + "message0": "Execute %1", + "args0": [ + { + "type": "input_value", + "name": "EXECOMMANDS", + "text": "say Hello World" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 120, + "tooltip": "Execute a specific command.", + "helpUrl": "https://tweaked.cc/module/commands.html#v:exec" + }, + "sys_commmands_getblockposition": { + "message0": "GetBlockInfo at minX %1 minY %2 minZ %3 maxX %4 maxY %5 maxZ %6", + "args0": [ + { + "type": "input_value", + "name": "MINX" + }, + { + "type": "input_value", + "name": "MINY" + }, + { + "type": "input_value", + "name": "MINZ" + }, + { + "type": "input_value", + "name": "MAXX" + }, + { + "type": "input_value", + "name": "MAXY" + }, + { + "type": "input_value", + "name": "MAXZ" + } + ], + "colour": 120, + "output": "Array", + "tooltip": "Get information about a range of blocks.", + "helpUrl": "https://tweaked.cc/module/commands.html#v:getBlockInfos" + } +} \ No newline at end of file diff --git a/src/module_generator.js b/src/module_generator.js new file mode 100644 index 0000000..e69de29 diff --git a/src/toolbox.xml b/src/toolbox.xml index 42dadde..d457139 100644 --- a/src/toolbox.xml +++ b/src/toolbox.xml @@ -1,14 +1,5 @@ \ No newline at end of file diff --git a/src/virtualcode.js b/src/virtualcode.js index dc7400d..6aec675 100644 --- a/src/virtualcode.js +++ b/src/virtualcode.js @@ -15,9 +15,25 @@ window.prompt = function(promptText, defaultValue) { const Blockly = require('blockly'); +Blockly.utils.colour.setHsvSaturation(0.9) + const peripheralsfolder = path.join(__dirname, "../peripherals"); const originaltoolbar = fs.readFileSync(path.join(__dirname, "toolbox.xml"), 'utf8'); +const sysmodulejson = fs.readFileSync(path.join(__dirname, "module_block_design.json"), 'utf8'); + + +const blocksJson = JSON.parse(sysmodulejson); +for (const blockId in blocksJson) { + if (blocksJson.hasOwnProperty(blockId)) { + Blockly.Blocks[blockId] = { + init: function() { + this.jsonInit(blocksJson[blockId]); + } + }; + } +} + var workspace = Blockly.inject('blocklyDiv', { toolbox: originaltoolbar, @@ -30,6 +46,7 @@ var workspace = Blockly.inject('blocklyDiv', { } }); + loadperipheral(workspace, originaltoolbar, "test"); document.getElementById('statusMessage').textContent = "ready";