From 60f3f1e8da3c926aca60247850770b6c3059f926 Mon Sep 17 00:00:00 2001 From: Francisco Hermida <483242+franciscohermida@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:16:10 +1000 Subject: [PATCH 1/3] feat: simple editor --- .../content/simple-editor/ContainElement.vue | 33 ++ .../simple-editor/CustomTresOrbitControls.vue | 35 ++ .../content/simple-editor/SceneNodeBox.vue | 36 ++ .../simple-editor/SceneNodeBoxProps.vue | 44 ++ .../simple-editor/SceneNodeCameraProps.vue | 32 ++ .../content/simple-editor/SceneNodeCone.vue | 36 ++ .../simple-editor/SceneNodeConeProps.vue | 36 ++ .../content/simple-editor/SceneNodeProps.vue | 84 ++++ .../content/simple-editor/SceneNodeSphere.vue | 36 ++ .../simple-editor/SceneNodeSphereProps.vue | 31 ++ .../simple-editor/SceneSettingsProps.vue | 36 ++ components/content/simple-editor/index.vue | 431 ++++++++++++++++++ components/content/simple-editor/types.ts | 43 ++ content/authors/franciscohermida.md | 7 + content/experiments/simple-editor.md | 12 + public/simple-editor.png | Bin 0 -> 60520 bytes 16 files changed, 932 insertions(+) create mode 100644 components/content/simple-editor/ContainElement.vue create mode 100644 components/content/simple-editor/CustomTresOrbitControls.vue create mode 100644 components/content/simple-editor/SceneNodeBox.vue create mode 100644 components/content/simple-editor/SceneNodeBoxProps.vue create mode 100644 components/content/simple-editor/SceneNodeCameraProps.vue create mode 100644 components/content/simple-editor/SceneNodeCone.vue create mode 100644 components/content/simple-editor/SceneNodeConeProps.vue create mode 100644 components/content/simple-editor/SceneNodeProps.vue create mode 100644 components/content/simple-editor/SceneNodeSphere.vue create mode 100644 components/content/simple-editor/SceneNodeSphereProps.vue create mode 100644 components/content/simple-editor/SceneSettingsProps.vue create mode 100644 components/content/simple-editor/index.vue create mode 100644 components/content/simple-editor/types.ts create mode 100644 content/authors/franciscohermida.md create mode 100644 content/experiments/simple-editor.md create mode 100644 public/simple-editor.png diff --git a/components/content/simple-editor/ContainElement.vue b/components/content/simple-editor/ContainElement.vue new file mode 100644 index 0000000..aae601f --- /dev/null +++ b/components/content/simple-editor/ContainElement.vue @@ -0,0 +1,33 @@ + + + + diff --git a/components/content/simple-editor/CustomTresOrbitControls.vue b/components/content/simple-editor/CustomTresOrbitControls.vue new file mode 100644 index 0000000..8ac746b --- /dev/null +++ b/components/content/simple-editor/CustomTresOrbitControls.vue @@ -0,0 +1,35 @@ + + + diff --git a/components/content/simple-editor/SceneNodeBox.vue b/components/content/simple-editor/SceneNodeBox.vue new file mode 100644 index 0000000..2e25cb0 --- /dev/null +++ b/components/content/simple-editor/SceneNodeBox.vue @@ -0,0 +1,36 @@ + + + diff --git a/components/content/simple-editor/SceneNodeBoxProps.vue b/components/content/simple-editor/SceneNodeBoxProps.vue new file mode 100644 index 0000000..2b15380 --- /dev/null +++ b/components/content/simple-editor/SceneNodeBoxProps.vue @@ -0,0 +1,44 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/SceneNodeCameraProps.vue b/components/content/simple-editor/SceneNodeCameraProps.vue new file mode 100644 index 0000000..7b988f9 --- /dev/null +++ b/components/content/simple-editor/SceneNodeCameraProps.vue @@ -0,0 +1,32 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/SceneNodeCone.vue b/components/content/simple-editor/SceneNodeCone.vue new file mode 100644 index 0000000..7d38cc6 --- /dev/null +++ b/components/content/simple-editor/SceneNodeCone.vue @@ -0,0 +1,36 @@ + + + diff --git a/components/content/simple-editor/SceneNodeConeProps.vue b/components/content/simple-editor/SceneNodeConeProps.vue new file mode 100644 index 0000000..fdd1eed --- /dev/null +++ b/components/content/simple-editor/SceneNodeConeProps.vue @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/SceneNodeProps.vue b/components/content/simple-editor/SceneNodeProps.vue new file mode 100644 index 0000000..cf71781 --- /dev/null +++ b/components/content/simple-editor/SceneNodeProps.vue @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/SceneNodeSphere.vue b/components/content/simple-editor/SceneNodeSphere.vue new file mode 100644 index 0000000..0177027 --- /dev/null +++ b/components/content/simple-editor/SceneNodeSphere.vue @@ -0,0 +1,36 @@ + + + diff --git a/components/content/simple-editor/SceneNodeSphereProps.vue b/components/content/simple-editor/SceneNodeSphereProps.vue new file mode 100644 index 0000000..cfd9c02 --- /dev/null +++ b/components/content/simple-editor/SceneNodeSphereProps.vue @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/SceneSettingsProps.vue b/components/content/simple-editor/SceneSettingsProps.vue new file mode 100644 index 0000000..93d8326 --- /dev/null +++ b/components/content/simple-editor/SceneSettingsProps.vue @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/index.vue b/components/content/simple-editor/index.vue new file mode 100644 index 0000000..26ac6af --- /dev/null +++ b/components/content/simple-editor/index.vue @@ -0,0 +1,431 @@ + + + \ No newline at end of file diff --git a/components/content/simple-editor/types.ts b/components/content/simple-editor/types.ts new file mode 100644 index 0000000..ba75f27 --- /dev/null +++ b/components/content/simple-editor/types.ts @@ -0,0 +1,43 @@ +export interface SceneSettings { + width: number + height: number +} + +export interface SceneNode { + id: string + type: 'camera' | 'box' | 'sphere' | 'cone' + position: [number, number, number] + rotation: [number, number, number] + scale: [number, number, number] +} + +export interface CameraSceneNode extends SceneNode { + type: 'camera' + properties: { + fov: number + } +} + +export interface BoxSceneNode extends SceneNode { + type: 'box' + properties: { + width: number + height: number + length: number + } +} + +export interface SphereSceneNode extends SceneNode { + type: 'sphere' + properties: { + radius: number + } +} + +export interface ConeSceneNode extends SceneNode { + type: 'cone' + properties: { + radius: number + height: number + } +} \ No newline at end of file diff --git a/content/authors/franciscohermida.md b/content/authors/franciscohermida.md new file mode 100644 index 0000000..7c24f7b --- /dev/null +++ b/content/authors/franciscohermida.md @@ -0,0 +1,7 @@ +--- +name: Francisco Hermida +slug: franciscohermida +twitter: chicohermida +github: franciscohermida +avatar: https://avatars.githubusercontent.com/u/483242?v=4 +--- diff --git a/content/experiments/simple-editor.md b/content/experiments/simple-editor.md new file mode 100644 index 0000000..0748694 --- /dev/null +++ b/content/experiments/simple-editor.md @@ -0,0 +1,12 @@ +--- +thumbnail: /simple-editor.png +title: Simple Editor +slug: simple-editor +author: franciscohermida +status: published +description: Simple starting point on how to structure an TresJS Editor +tags: ['controls'] +--- + +::simple-editor +:: \ No newline at end of file diff --git a/public/simple-editor.png b/public/simple-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fa21c9bbf2b3fd90127d139d93a49d1f43cd28 GIT binary patch literal 60520 zcmY(q1z4L+w6GA5-;ggKG$afFD zqf8_N0?2j0a0t$?^^=nmI|=RVzq%zID)#zIbD*U;b$1jkbbNRC7yYjfR8(j-*~lxfsJ#iZ!Y{Y1~fvP0ASW0_RgSm;$N9mg#w5;Lo+M4eg)P}wxttg-q;IcycMIR z11F1Zsjho_?D*d`ic(i9;5Gpa4Wrv>mXVh3O*x;g@`b&Hj~MR+K=Q&S>uUOmp%!LL zCg_N(|Hy_MtIW%bcqLpi{pf@lh5MfH*XWWvjnFeRXhG0(GeL*5)orQ=*2Mw6^c)H~ zY~z{kxj0#Nel<8aSPhPg^Rwl@*(`hU4o$S?ec5t2Z~8Ij7jo6T?Xdq_=lEDrR<=LwD&6riB|1@sugT^)F#YfY56h}7V`F6wjuZP|E^+&l@Y}4v zmc9UF+S3xPCTfbt2R8wywQmB~otd|%UKQ)lEy%_Tzp(=At4bNr9oV@r<>bANYV1LM z0}aC6<9QIn;i#3S#h@mfkM#5#og2o){D$vWJx=kw&pPb$ZTC+pQ_NwA7vzK2t1Xm1 zzgE1kp~H8miI0)fhxV;kIadI&u?+s`3SY9o5V_dBg)%&=x!+MM4{wJQv}+`PBrvNk z4yAT9d9Y(nn=$`v@nZLAY|$<$X>4xHb{jo#a2(4F<;07R6E`8`d??YaNlVmXbL4SV z`CC$acW6@ZYDuZ6Q;_NvUjGx4eh257peynrkDXNA@5FDpjYR#58G*%n7LM2?f_7=Z zf#5uu9#0ik(uSknTgDoNr_vrnnoq+?EP*PtZOZx5I8`y;FH0T?mn4ACvJrqI3UN|CL-6eA#Zl)Pzkilq{j^To!k9&2M~y zJEGZ0W@wmPX?)}BJc^R7xpnX0^D`8 zFl(u@%Q)L%i-%qzE7~=^ei-r3k3ZjKIVV45VS$t~gHvHiMmNtrDp@=7nzl=uJbQG# zwiB;$$#BE0paO(UP`WjJ)b^04;HX@$T{rcqsX6RvCN&27heYd1yO-3e;lB!@xP8hU zcFat)&K{*+*OVeQHe_FFZ4t~>^{;y&^aFR>uwQfWd2&fb?<9b}YC zT+h)}RX{FxX8=!4G8{YHbH4W%9M~0ubZ(@C11mmHt^DYhs-@9j3P|FWRFOClJ*CCeib?ODzMb*ekbQ%EIa)OOo77!4}ZsP!(> zX}CTP6O-~`JE&l^FanR#h7mQWsICB5)5C=T>1eTx48AYc)b*!}!49hJADwOWP|>?q zpMu{R9~9_iYC(ZuFT9_-1g%9$Wm?gp)6n%&(5p>6T=`5$%FU{!YDMt&DvR;zM$N^OW&9YJ320VPPelyLon*X&2~9e{xqlf5>>GU z7P);U_ZflEU%CY2Lg(2{oxgKEXNLBcb0UG+I^77<>y`_xgWOn=kEoQM+9N%eV^nV@ zheJ9FBj4+29?X?xTKk2b(V6v>c{f!Ds&UPH)?r43d&21ksx*KlJ zkhUjO=Xl5hI}?t0Ypa!A$4E5nJl1+9^kSEQI{fU@lH=DTWHzR4)+_NbEyd@8ST6mk zutJqb)MI3eZd@`wNnx_a8U^PI{Juo*s!e+jViwr*Q|{9^oO8Iy9&Yx{-j^ykPMv-> z8`n3xR#tysu`i(-14IMCU>d-?>J08t44aMWIu%NM>X8;mNWQ%S_}w8;;j z8yD#LRXkmf88Z1WlFLK}`q&tGD->q?DnRl<<1)g_s~trpkoOw(p8hVV=XZuJ&*V*G zoSt-)q2(bIu9?#zh4YQ`HpBg}gcX1T$LYwOoZ2AgfZIy7Zf8~SQRDGsL0gl#iUgaZ zIG3^wi*Az|I8~Rwt|vZvIhg;H_`@7h;B<~L{m4UZSjL+Nb4lOr%T(tSfO{;^9=N{Y zb=oU-vl6=G>BfD!73btV$v!zXIb`nZR;kdb*l$d)m`T@wg^R-n&*mJ zE?>^xeS9;5VTJ%@){62$i5?ne^syIF1I|yM9a4gNS^|=nU*Q#wbl)p1jkrrFH>p_J zw?@WHu)%P3qDY(xQ-kL9EZHs$V>R=J=+d+rZ0NA-BMgks=Y;77B1iN-b)&3c(vSgZ zcuV!AN?*ZG8~^4y>ok;GPx(|KrEC4}VL5T!Xd2E*6VMU-;D~#g_w7NU_R^gXhf=-^ zIgd9R7+sxMp5F(hYqk;avPKFP8h)`{)Y(ro$;{-yGU2hft!|^>AW$&Pn5fi3JK}f1 zzmliPwubOHz4bW4XSNaOxbNO_di+eUk9?&2exitfvB54%w$PW9w=`U}Xne4$=G@q8 zVU9bpPKuJ4jx`Gz`eiF6(myyl&-T#l;%A2ad)Jkg+8*1s<^i``qwTxR;W$<%FZf3A z)l41{8}3>WLrw{jL~4qvPYGJcp%L=f(pQoJ++J+UIqj~BNlVLjHc?-3!q?>|B~K&; z1&F^!=~}3I8LwzGUUDP^avE=Jyu!t9YFNQ34D(jr%db!sb#GHFWM6Laq6Y*aUssHrYhXegMu!{oj zJN%PRTyD z-ITU?LcyBWi1fo_7mML^^v*t2Im4|=0xolj_l9lboPLctciLmi4XG<@*V_daPTTJT zOJu=^T7@TI?`^xmp6avrx^-^hTmenYLh%+Q2QzJAX`b6_3m8f1&eNy`@`4Ll=_BHJ zhRSapmS3<~1Z?5ij-saacc46Ly1%)R}?AboRRmx|H@X<2G6|Ic!dUYPcFrB3N{Ugpx%?Mn7=B z$@w!l*Ji$YSb#`(=ic1}Wb@hlQeN+LH_A@Zc`3Y*k0z~}IUQJT>i*Wl-Z4vl%T;cE za>RYkw(UzeZQttay%38qPU<-FH)v3bMz47T92A?&8nHNAG`GF)B`T8%MXdsyexoqg zjp`qT%`d8z;K7l#tNW% zM&IQE#)z|Fyd_b8+F|o@qB~yI@nJ>ibX7O%QfIaSP_KsKC`&)!;fgcY5_00RH(y`S zME_;5#gE+lQb(2xvTIg9%0qb5WxhlK6Eb=Ti8qF2D*v^q$z^;~aYf5CE6X1{F8%^T zIOCqHwq_^V-Rp&E^F#!^QT?)-*64UauXrZ=SD{9tr`X)&6to|(5Pugi`J*DwfR z33k*$eJesj;|3hBdbF84yH5qUqtVG{21aVvhr7nl+N|;mWR(AAGl&H1aa4OSzGiijUhjR|_0%Et({ew}ABZ+Ul3DL`%KjW6JiP5M#LKd)c0 zyE#&O$16?~%zfA}5ZN0fWuZY#$gIm8`PB91Av+PMtdK6awp^-i&QuiMlf3ps$9tP8 zhLS>BQP;RSn$e)aa&lOZ0mNyro5T!PFO3bN0vJ&c*MrHg>CQJKl{ta;WFJ!`f09WZ zFG3C3w}u=|#P5ymzf~xvt({To%Bz(weBiybZEH!Dl=H{@=f*}kAg71!@7*zvmYZsUXY+q?N!y&!icgC2;&u09>(bqQl@mtxZ|kb>|4_lo^Nog@W+zAg zFRDfRw}lTIVlj|$+Xfpmz3)&@c_qbb>u7UF|@to1C;&U@$ z&>d46YHD2bF)$I+PoJI)>M*RCOs}_EjC0*zvj6B#OJ12~&VA7DwAmI<3vAm+6>(>> z%d&IiX#~v@o#qk4auwjyX_Ifq?P>#yFGBreU(TNt*p}w)Sgm)gkC?gC&^@qA5f2ml zHSMcCwP5KjRr@Qxnx)r~06M#_4%`x{kJ0a}hmwq%k)6kaA_Ee}fO0!+>0lqLryh zWJ7PW)+BW;r2$SV1nUu>hb)*|t$a&(5t-+~7>#v>3T%Pxd&EDBGtP!=v$3@;Q zHJS#aR>j0v(|A_5uJ(n8v++CZr8K!K$pBHuPkr36y8Lf26WvkQ=I|*&5m}!IrC3>6 zalYbzBbDc8qz#_q7i9HdJrVZCOwP@X_#hX1Vb6U9uwKQTE@V3ucRs>5v@y;U28l#D zzHHJ60nO7-Rre#OJip--F^{g=c~OboH1xYqsxxg zep##6UN%!3_mL|Jr(M{BIumf;ynj#?`dUeLY2K7%C|RlQ*5zPAtMu!V+mVRWG^$Rs z5woZJDYb7k4>6)Yi|;i=D^Dwt39^w|em)kA5hw?bd&52MGmr{}4s#M_*jRO^NNKWU$U4Kz=hnBW+Ur$?l-8AZJgX&d$aP&GG1am{CnOe%rB z!YS@Oy7qLdUG;O4_Mn{VX`1Wu$kCR*d)f)q#<{Y%dC(~r;QCxO;C!-qS+ zTI?X(ni#Yhu1(bilVz&fjzpVHRiR)bO)efy&@%lBHNY&$f!`a=4Dm4d#FWzaIX*Ei z$;~!RJL>{PQ#bGEX}bvus18>9<`vF*7(2&GigJCHw%#=Q8(~CpgZzzWxI`+JSaVUk zz-A5;7C`ENvuLN5(qDv((cG>R?AyG^J|MFm_^ztIT6ws`W#+dAmGb+~BT^ot(^e*j z$_-sxCR$EIGZ$v&P5C=fH}ugn;LB*wrzG ziXSy>wNP4x1r{hjkmLcC9v(B7x{KVIfE z#NkF)_sm9)3r#n#;F+iun9=ey>r-LmT#kYqAnFuEZjETm4IuP{eJ|6I0b6@ZQ34KV z$e}hM!HZ7ai)6KI;gJVWPtq|wX?GWpY(9rO|JVKxH?bQurNN$cR#cN@(`YpHd(Tq# z2wG(ve&fGdg5Kf}Q&qH(zzF3aMw%W}P`l~M{;SivsXb6()*GOd!gsDM`fp{4OD_KK#(Z0%&F zUM3R}5p1^nN6!HPo7J<*$Jeh}vwaQ;Em^*%bNDQGW8dsJ|X_A z{@LUR=)jHrdyHJwUX&CJ23yR2oM~7g%qYAf*Ug0ba=V(fSjes$e$+@Ni;T=YrVZ=NdaZ|qhGy;D!k5ZySR z9l*JT6)BxRld?*`*@vAMcorbz?||p>{xtZbn&?nhtFvRAgbnSsDIN`*O9Tl z2UxF3B(!KIo(k*vfYNGyytW1S)se^Nd3Q(8mTj-p1Z~hrioh0r7(>lnamuWoUN5!G zufePGO1_?Y%b>ih`u_37_ep|_{TR`6cw+N!siPRpb*ssUel}1&iG5tOxp)erOKsdG zJbxGcMoEr{KjbbWN5kX{|0JAc*+rS(zTWHp2pSw#Sb0XAz~> z*HUBrBxfR)p53+Qur-KcLUk41M*bQJY*{AOkiey&ur4Zzr+Jq{DaMj==Mp@IdWuWi zS#^x>P9gbmwj_0NazrsAoJh=c*|_ZscfKmvuROn@0ae`Vlu+w%exX-!v25ukg!{K~ zi`wnkT1Bqv1J9=vbhHKRcWh^7Iakmeui%a0=$AOh!A3seLa@O(=({>~K|nFhtQhrfjz#d3q0)ZbC$z zw$*SnDANYmZ1Jth)?6DMmGFe@dv;rg&Ap}c2K>TSxwe{YixRXy()GP<&oLr5tZ@Ek z`QB_(!q1K4CDxurjiZ;5Sx4Elv4X!`{=i+nbQJUE8vrL?cB=1@7|In6FQ7RzFSi(yT%lXqKSDSu2&I4V2QVp?OMHBy#Ii8O$oT6p%&#G&VSo z5XD~Arg2-Hx1=vw=^S)Jq91l$c><_s<<*Nw?Xqwz&5O`s@QAP>t6U`ygos)@-#aU) zSJ$}B6_-)$Qy5{x&R6T363kF^e<5EUzt!)knQwUs$p@%p@iu47VMOOC`!~o(`$4++L5`H8(s!6wA-d;ScNtAk@KiO}hOI6_$5YQTzqAoG=gqJR~0ax?uIa8vIE1N1*C6^!14zsGs zS>Q!Kwl#_2mXGXITkf>ujt@M{`NmIwlvexjqL-PHzGzKBi4poZ*aq-)*Z9WvV5h$E zwjkJ+Mb+6i`MzG0N1;K+u`!A1Mt7$bvN9Ko2`7kk3|RG=(BpJd&$9G%hbe)8s?XYA zb%Cw)4x<0~Q}^Mm*`Z7>J{cLV!u469De<%+w6H)};At~c{=FC9-gp+tNDt}epO^OF zNnu~#QPJrNnlos@#BDTC!=yG-Nbrj`pn{SojD#fQ8(+bx>9$FRBUHo?+a5oP>687H z+hV-t(-}~4uBUXM%ySrnuRTOi(tE&^{^Ptu6t`cJKjWRB;VF+;CxuX2&G|c<+L~nh z{?>wOEW7Y65)bC;9qX5p zg=2|&B8AFiY>W6}cTR$Wm{|`U6`**8+j=JsKO+76Wt1|B=xMLs%zj(_LaZfy6-(A1k}kcU)CyoM<@K!wb^2% z+ZMS;T)7ciFkF48t@|O9ssdO+$a=DW zRU4s(GBA@C_AIwU$XzlrJP$g)X`|y>njf*`_@Z!ts_ve8#MN&lUpDMjw z5((Y=&sD2@c2~IwRSMSQ3M`Cz>l>b7CCef3DBExJCKCZaBnwC~-*fv=A8NeN0wEP- zW3aWye3G&RY({RQ9%<&1B$(-Yc_46V1m-ObVkX6IrR+^z-^4r#CZC+ve~ic4>QAr#*r0*Gmt?9W3Hd7g5IZjT$p|*%E}Zzp@$=P6 z^9h-Edh6He=_Vg*#zXqTNkb;{7~r7b-GJc5)UN$rHDvFHzBjMd#p6SseeZ$$P0aI@ zw1HSq8&n>2o638(O20Pv>I8jDJwewL!= zeNP25vZI}w3b*$TNM3zJg;$lkvV8?jr!*e)q@@fPE|wl{;tpx+eA^|Br&AgtTd1zD zZYOtzWrV;qZs>w{XM%GPgM;X^0I|Q$F)*{~pIgpdvG=W$JFR;2x7*HfJGs^r8~Wv( znQKdxx-gvN+_OjP7y6yLl?H*;jLwIP0vzm6*YqVLLA&K@j0WsI(;Wv)sl$ouk&Rct zRrl64;F|DF?-K{OXVScD^kc(`F$F7)M|DrolE?kdP4A~UrWHWz84a>e-zd1s(e<3;SAq$U| z55eE0lDyBWSbO)HW3^fT^h9Ns3?@}UobJlVB%8!QWs5HPuelx~!vTxcO5x;zR zeOh^WoHJZs@hrk0>Z&;w(oF;Lu5kHStpN4<^kW{UP-xGfymv%IUh*7_8Ix|!(qnNd z7!rKafp>NIHx9#ML|=6x+t+r#X@CK{?{8_7oWr&ED?Q&6H04eG7e3kCqIvCaeCB<% zny~Z!;qf7{5V{>r7|~W&OR$VsYFi}JoE;Zy&9MhO)})md^<;PjxLbhNFXA2cuPbf5 zJa`XzIOFjKVCx+znAF9P`6IZ-L&G!lcfxVPEj<0 z8ZQOdFJ$8-v3f81NQc~x$i5A(Ic&Cus+!9wjjBekvhGyAL}ERxL2FluMW2e4w@h^K z6mI9Bs1D>4r{du=Z&^Ew2qvn z(!$w%G?J;3NL~ggr0g*SB$=$*aqkep)(?p;>Da*-De;b0Grn z{Of@;{i5&tyGI!hgNkY9GHK@PdnBFIAZgQ2K8-_fPOrJKK+%70)a6~Q#J@;6T#}gt zgab|^g3M{Y&?zFmfsC6X(<~~a38~Z77jPFg;NXyj_eALi-I-}`T23b!G`cn~u;cSW z?yim(W@?vI@;OtSha){65geyUg@J{LfpE$s-s9u9m~x#4nf`MJe%eTl+vDgCT13EZ zz^1FTJxTMB?R@nc8Vawkg?XCQMv*R2)74WgQbbL5j6w5NfTQbYYP#dBB>^QHDRu`U zB>XbYNcon)%v8Cg3Y_Gn`m!{+bk5}v+$hJ*6gOn=Z2pgea%!ngDy4!C+hRsLMoZB! zM2=3RJf(W8$?sn-i^jD=;5bLF&ypGkkYTQ;|}6`||~d0SDOF-HB{&(OdZ-V;w4=jd zLq1L6KXdkk*0XOUZ_g33o_TqmW!kDrKWhVNr~wxDp6@_rMb^8PzoD6aPGEIXByZx% z(gl&jeAFt??b&+!e9G>X!CLVMrqs=_t!b@b+UoSFbz+5F5RA(drJ>8#FxdCc14Ia<70?Qd#m9Jf2yuH(e~r7|;PY}zEcEUF3g z;G@r4e=noIyFXY;v9JzrZ124_(mMc9)!f(aW+hF_j490C%wCO5yJ)ZUfLnY1imV%mq=}4|)kv_Y- z{kLJ_SE`^cAZw*29Zn@xBcuLFLC)?;=NKIC`X%0M#{8P}qR?^Sun&q9BX`v9$ASi{ z5BxjJlYy5fIsT?X975xO06)L&f%A9{b(}WSTZ*D#oj+y@BUihhY)O%|))VL=eoG}g zH1AZ~_FTV1VhE<6NE5^9_B5s6ncNcEq?<1^<;3}(Q52ThnZf6=G}ea8o(jgrH^!H@ zv$I5^9mhHaHD5WBed&V`PWx`~(Kbs?bD!C%B5QdNZ~KD)EH)LE!BrWU%8FG3iq>Q7 z5LhQLW)FR=`rNBNbsjiYJ*|3h8ye36jeub}Mesp7&r=v$8+GeP7whb(GB385?_N1- zLiq#a3Sj#i4bpCtHLdD2xoL%-GPv!fZrk<# znE9Rf@mrve_Lv))RK$m{=!N7YhAx%vy{vKu|eb)1obD8nAnCbr69MNG97(d~u236G<*keyo~{CXyK*7s z|HVRa_GYG=fq0F4Ez%6<@H$EWw(yf8B3_v-`BFVTQ>K%3c2Xgk=*^d)i%0r5+8DU0 znrTCgyB(`1q@&l)V^)^Uzlsa?XKT1z%fT;Y3-l~sR-BRwqh`?Cle@sL%;5kOT_3`2 z`8r=YdCT=6F(`_B*QC+)@NaAXjxytNv4u+YN1Dmn&0@<*2GQh22{`t#o$oi7V$i4o zrvRkc!qX9Uu?B4?6V}FwP|o4q-bYWnJ+b7aT+7i=KUjw4clI)iA*Ef$1_@O-OWaVQ zhq&sNyDtgmeSqcW$|$2Fe@aXEJSYtZY5#Gu{KXc{=)0*Z36Ei6bhL8+_*yv1yqc4{ z|7m9^skNN#B+QAX(JEQ(e+8QE&6a zvcp&GGyERzNQ&mxJPySUYjSn`<7+T7GQ!e=Q{IA9;X@@X(^0W&La$_H1_d&_9L^+4 zby{%XWMnLwx@|B0M}wKPNItIGl2@M`+&i?Q z!!}VDasOxb1|f~jO-AGGVthO9W3n=VMpg^IT_wqEC0$%164Qp@tlY-dAxgB-NwH27 z^`|6OYw_SKQ{<0ybcPS*ZK%;9wJJZGFp>w2ush6!pyL<}zIwo2ybPhkXs;kF@vWe% zv!@D>;mEC}v~2sQ&)5`zDBjfv{8(k>#+UM?9o9MQ6c?{qoB1$z;b-Jk+A!nWm}frE zWg>f@Go&%nt^x+YMqwzOIuU(i)4}Gze^fhsp^}SGeydl6<x0z5sjsX+M0X zeoZ7QTKXN1)#DT?W=R}tajzfizQ$hV#DDW}TKG7z2K4v{`I6a$bq)fwJRh7bFEad5WYSQkdcX7@-SCn>X0TV=fiw36%!q0le z+&2P?C?&HfGS4?!Xq4NmOh+;r@CV(f<&~?q3boQQ_(BcutMH%i;qhBz)55yF68K9byn_;s zEp&%GZ8j>kUBGat9acbmX9qcHt7eOSIz@xQ+#gTEPeFap{!&w@%|9_jj7F=JhNJTH zKL!L!b+(A3!69OelCObIrW;1HteU0*UM#PEiBL6`sT1*Oi^jm)#Fx%cFQ?_dXe&4^ zZdP7>b>lrN9{EDx#f=Tt2@ry8rYM3EqnPDyz7yKSe_kkpe%k2vPiCQWtM)u3NVc5bZ6H zyI9%h+>OvErY20k{MI|7--;`Syc*;cy!H#KK)O*5=QG=!y{g!7kUcEsvsq-5S(q_k z39R~R?KJFk`loi8?2RD%TB}(^`00orN&2@3?1Qr7)r_~wURlwI=;_%gmzKB8o{eoa zQyMh4_CN_QS>RCmJkvabzo3i@U%eYjR3MOnQ$ZY(gMGBNAJG40@p#Y7b^*Hg-V}xM zierjKfvWgY%5a6ke_n1pM_Y6B{fxuGC7`N31K_UrnQ4_)F61E%-pr|DW6uSjmP{9G zw-9DTvPomFK#jJHCQBXtxhD7Clf;_f(Jm-Y9mU5U*nBgYJV;1Lpgvr-JA@OLCAx=X z(Rt{Y=!9}93n8Vd>pEc(-8p&mQ;2@w5=bNe?^M1GlC*MI@%&BKhMm+0yVYKYFUszNnq^NKD@A;JXyz2E%#SBuD{gc-DUH ziHJ4IgV;XO8#(KFEnTDDO3>|S(R>FnPE{qsqgL&6sz5bV+5Sg%<{hab0qiQrra_6s@|$n&|2j? z?WS3z4aQQmBQ;xOwC1&y7(MvWm&r;aoBYXATorvR1J4Q|bHr6X)uH?W<&Vhz#iw*;=zRE1W;~uQvU` z#TXTDFOKKq%$k;7r|kb_zMAHgPGJ~xRU8&+ke9gc-=N=}&MF)!bwV0uPSJv`?|n-b z*3={`54tM)PoMPfmIa!(j|Cl2e?&;@}v&7)0!^wd-IRqsb_4!SyApJT_9 zc*QRIA&~5i$k76bIFr9N$=h_4oz3R9*AiwjrH|~rzJ{g>HTc#6W-t$>LQdG5s=|Vo zto-7A%}rmg&m1-w?1#DH7E^N?mN1ZPT;7w~`&jt2=kNjG>Xbw1Hdc$(F`)+#n5$n= zu2E-)p#?{rH_cWkRs-Oud}kJDoQ>#7ZQscCla_+fs2)+RPl>gdD7O@LkqpAVzSi#j8pPnPvk43}`f zpwx@6i*a`*o9W1Z)i`Uv`fKM8Z;toEl==lZzoRU&(jp~knU(;!gKjkL(GVy3Tb`CF zfG5rZtF)Db4=@dBV$jKOy-ok0SOzV0urVXfF99Eg-&6t5-`I;!nTck5!61OIx!&=F zDhT7I7Lh>r+%1(y_Rh()Z#2@j$kWw|>LV9^eBo%{V;@tc`wLa5i~E@HD+N+sw&Ns@ zi=`m~Ch1o}sm?@$tuj}KvvFv~*yI2+M0ssA1v`K0U@rT`iCSyiO4kQF60ezd1&m;b zFahhyFSoL^VYbN0twN*UmdT@V)rj)sq{mZVQ9f2b4`K2bxStQ-I5nm>J}3>`bmg*f z(8p|Rqs$m#$EC22m%K93D_VQW2-tTf96lGg8fe=yTZ~Lalam+>p?*f_;_dr2Gt)O1 zlKeM3kr!gV7S+8X_K@e;<9U0%TV*j<2)MsF`Lu?o<-uT8e=;Aw;eLrXSp|pG#UZ`Y z-xF{2KnS#L;o;#ca0EI@BnA$JCy<)Wz+s0lGwhLJc-2^tdw-$bTG(tv*Y9RkdPUK# z60+4GOrNJ+R1ZZ^r7Ri;L#7fB3v4oUB6&BfXGp8OXOKfVrt6GJYe3k8J;4L~6+%p+ zpM8M33JXaU3jy=<8m-S$s<=j6bSKcrA}2>@UTl7PkH!M5xsrc=en^;}gAQR(Mn+oJ zWtlo&djh>TN?R+T8vV71V>ck-Ldzt9Nn3^b9LKG=rcFG#we+*74P}3CuWUkF#FswX z3I9-AmU_w`pBd-G+Sw=_F!6jetY?bpcJZL^7Hu@^P>oA1^?)V}49rgf0P>&St@ zr=*|M*stv(JdT7uv*$9LiH0O{x|R~IJbJnwGMM^4m!R|+LE+JWj{&t?_f5nzlPSX;q-y9g;zRwXmoao($o!`^~H5x2i zG=eMwtGYydUF_wA|J2x$;Tf6;M49LE>v-~oyQx(M`wD=T;_3cHrDuQ%0<{7nvEJeecs}OWA&2rnLf4|mU^1K(Va6eRbf1{4 zzE}9cMHgm#$}G&H8Da-9IF4XFaIt{`@vb{G8xbhL4Mh&p~@yYDHU^H6* z->_=A4aqWS&LDwF6n0Lh`Qoqyl+Lyt>*slsiXb9XbB-p*_DD2)fIT#sJ zAf1sax@N9&SV&{a4V`e}v|8qJEXaEx?eTM_=6YsfniS^?UEEH^sB*qRsA7X-H($?x z;wZaX{b+D1(5is4>X}9vUL|^yFV(@N6qvuuwjM!MhFt`1g} z`?X5`)1W4F!{wn8jKtgFz%-}VWdfM!BE+UFH50KTLHAC5@vb8@nB>R>lz%{t=(?*5wUyzFA|C&C{PU8P$@EdRe?hlS|o>GQ8 z_*F=+{@*KI5}i!thR8DDT4rULivMC;_!x0W|6jrEdSUY}!H-jc;1D@!{+!cD@fFyA zN&M-zo7O-7WX@Slmbo&F#PDLpzl^*UuK4}&U)t_E{+~7doBYAobzF>^xk>*e1B3iz zbzFBSh(-@%ZSbl&jcnp)%K|;qr7=N{4wHs4a+9c`qjj?QjwtX?IEJzn`w+~3N$PZ& zg8iBW5zv~IVNkD zMlD{Z8w%lP0hmI{efS*qh})lz1ebwQ!k4GhM}n+-(WbZ4K8yN97<%gEqHA@3di4oC~$#M;#JM=>vzQXeoLON zziMc2Z<7z@h0WXP7k0L8!ZsQH*RIe>9n9GT7ZIvX7aWvc{MUyzy;5k+uzAB-$GOUui{XBwX4u)9LNxr)_Ed+biJ z&3AKeS8Vv%7>Moc%8B7pn}fflEEo-{4Qg0-D@n&KXQR=1RfCGf3wU^>!K%LI$`x)3 zZ~;J9M3Y?akLYq2xFoHsXGQlSlbgrQ0L`VS&hsfzc~!WAlS^q+6YTe&Ytyl+oqZx7-@ z#_-C|d?PS8QB~Pa-~e3opZ`&Lb>_etL?k5;7QF^~N-KcRi5klXIu?rOUDowAO5b1R zdcM0u-B+C$U6wk>Hf)gyRAB`ehsT?nP72wm>b&asu0t(!+u6Qt-^!dMtg+x}IPzk> z6F!iQx;v#y>F$v3ey_RJ=l9k>E@LfJ&YW|u{f*D=8g>heApPGb67p6wFiqdb_I#^p zPwzM^Ri})@RCTb&8TZ!L^EoT)Fwp3>InyJ?hYX7hB&-zK46FQNnALMP@ZzGPf{B#q zDOp%h!X3zeJQ|N5*bB(K05Z=1?neqR5z-0Ku+aVhUqx=4f`WqTiHHmL?vJl|*rCbX zrrB9bj+Z1%zP=h}&W{;Q?U83{)|;abq`YCt@X2%wy23IfvMPxyTW%s3=`hg~-g7G~ z*6~95tNvDd#sB-(f~@vLznLCmWC2CBM+Y+D?K}ZSeQMr1w{c(e?szL+IFE-D~x3)=1;{ zJ-$jC_0qa{NXJo6Z%!6^t$sD0yj0%`%ym3_dK2O2V zyxNaIP049B9a5243A;;&sl>3aKaj1B;^O0%7uH$Bn?z6hZ`g{34_it)@EcRoGV)7Y za4#L5xJ38VLniL$KRM1Z;b}@*xs2*)7hLss`pZiOzr)JP*tf=t0wyN7;gNzPJVyBB zAX^Ye47y|jlwTzMsosyLAmrRA;8mC@W8-rp1?B;a0jJe`fcsTg^DIiLp4a7a^J1pS zRQ3IySVl_7j;AnF&TbdccGO1=?-mN$P@@4YL=}AepWij4)QlbwOInrYG&WL zIn1}p8pGftyM!Wojo|scVt7u3Ks0o*%HlkUFJ!QZEJS{eYJVVqP#e32ian-q&i@9= z(QrMJX_Q!`{9c{*$H!~;2MJsj{R(L>d2M1KI$}fLoR{el$a(yl3GeRJpC1cH zq-eBv(rB@(9vCeztzqEf|NoCe(iNR6oH!h4guB0gKer=Y#Zh-{ytTpEtuqt%g{7Bz zdHPTc2vF!4!RI5PnCY|+!4qr7Jt(yY9qsL{ZEZJ!{=Fz-M|6@#E3N?zW_#qDCky=! z=YS{S0$aQ#`wNRuyFD5UB48`#!ei8M?Vox0XH2@>A%%od}B|Vu!r4XMpTIn~bU7-e167NyUCx;ri5-3r_U_ zfgddFgMi47CZnaBFV_@n$NP0kiI#Kw!qsvNTT3?xGy!)2!$L!|<_$P{z^+$#;&`m+ zzzu8IF8k1CIbXJsVQcIglk-TK@g0QKYTC+=%fn3wwBF~!m`JDmYZ9$*y@9;3^j)H? z*zJUxHCrWLUaryjUGMzpTD;#ND~GA#USJ}*=pqm?UV~z)bmPp2vtIPS>hB?j*zD0E zQKgi;JQJ)l$w#%ufs)f=G9a6NJi%e;P5ep>(}!_-fVkLo-eSvLQ8_$`-gNAoM+ry# z$?BOS(@S0Y^hq2i7TS%Y#{~?_f#ANK>s?B9p)o##W+jq_!|w{)tk(IDm;F}IgL`Kf zWZnrczv&)Vo3iP=d8;@0xKKM=%B2k?d`DD6Q=xZ^uq>qGO!|5`QA(nqG7FSRw`u5^c*lmb0nFk6`q`l$kWAGl( zvfug1H25$wW5w~XFgqYeueK?gP75`8s=_-rw@%fRR@EfB1jLP)ehWIG0ew=vRZ%%# zU80i^WGEhY%xHE9wa>HIN){6R+Fzk`45}kVer}85rDRr>X1aU{JXu;>Atqk{4q3)R z@m$VsZDU>x@Y{n*>|sTOtxi;|Kbs@rc>qevZ=!o}hl)P1KZ3T*kJPr;2S`X@X=W$| zQLC2e<*SbF*4U-_zd%P!hrgMs@Gd$=47_&T411!4d=6Ki?;}jpaG`>O?M1vBF^Z?q zGT@hV!7wqzz}tDH?xB>*avFr`d;Na(`5N2h?4E~Ac;aQ_qSy1VkeVRnzzMx){>8;8 zCFj9T*8&_ItvyIxlz?-fT5dMV*ZcYjan&x4jwzqI!2+WHnJzJ zc(Ipe4No2^tLtH*iF%z4G4_5hO``&f1Ea+FJh#e@kc0fh2zBB3IWlGRUHQ z`}K0ODAIdz%tArVq`+4Jbz}%HCxkyo*pj~Rq43*vh<*{(77&?B%7naF!uko(xO}c` zkEOMhvcL*Hko-4igsn&ox9egirEY?_-Ewc(ykr@l(;(?Y*&Pc7lW0KR(s>q0qCJ1& zg^n7zERb99vU$3Wn~$I0dZqe%bOh?`DfjTy$rpoD2!84_cI`3}H0AI{5*!DyuvDDw z7)FD&-3Gq}proj#aKlbAR<{jy@BRIoiBrsQBCIl}wiy6}-- zE+48i<9uZ?0rYtcvId@`cmLVC@PUs1!crOpI`}@GTO=WRfH%r_@Gb;_ri};d(k@Hs zi&(2Z%Gq+uIo%UfwcWse#xv}V!ZM4tV89aXJN!j#7)l*Tr0%~J-7-SSuN;2Bc zvUECB`m^{WY5YbElMCnDRQ@pF7j>%Ly;fT%$e|%?Breq8fZ9r;=JaXOI%~Tx+BmsX z2RXs4g8-mt@gz3Iv(7KK8f}fnUiv?5)(YvX9JnKW!TChwZTh`{z|hZSWePE6+U!f( z(&h!#y~CH0)5Rpfq&bYmD@y7!OZ)r`e$7|MgaCI72Mtw*#Vs&$NjpUim0BoWt20*O(@67rCnR)*okf@cq4d-zP_xGV@?DXOP zX5ZDZH<@r2*R%NmYAO%-CmZ}r4l%$-{SO5TKFY(VUS3;@1aM{bz@R(fx{m_nmQ3wr zB9qZ?JnEcgNjp*W7d}V#@r#{0h@zO(ux_sGy>fGNPh_?M4fgjxjHXu-aW9(%hFuHL zVtcgqx$SoOsNW`slp0DcH!eERE?wOwM^^%U@!)aJ7SbB2ac>@>whp4r~GELvq|z^wOw zuqI)m2}w!@p2!R=>^=26-{9`bNedm^F0Cia)6CMn<>GI^3%)pB?J5WF-n$ZoHcuJ=3q zoX$@0<(l3ynon2YcfC!z7Nb~(3bP8)e;NGBP8f4l8hkt;IFxWaqkswfiJ7`sHz?SQ zjXCcH^bS}m#Hq{u9d2H2)f;;4o7#$ly>ad4pg}%gkaAI*|34mta+I01t;1)~(5mLn zZ-o2y|K$w`V?#cPOGs487f~@WVSw9_ZHewac((<=SE6t0=pdY%qgvQp)N2eAi++JC z_f^Q*6a^Vsr@hrMpXK9-wE1j_n1~9H`N0(SVj6~Umj$6`Ut?+o34&t7Y0Hur#c!%l z!3cYJ1sZpYU~o@*<&HOM%-sB~BJl|}aS-ZiZ+cu}qPgG1>B)HeCcvK|Jn-@iiK9gT zBm*?9?bcR`V%VSnor0U&0}5u*47nQ@TID{Oo>eemV36{Mf){c+fLxV^{KzvY&}!<4 za%9cvPY45o*_SAT(64T4qXH770?n@`%(qOYe*466TQHrHatHhSOL1?L`EUJt0f1JQ zIsD7s?OD%%PdW~*#Cvs*uIt~WXVShul^Z6(Z+iF6);5rC@KF*k*(YVj1WD4m1eXH! znuxEij=&&7G?a=J!Yykw=pdrBtXlqEa}>vF9R5?S4e3Mnoa63f*yK^He#GRu1Enpf zjLT@nK&m9w(eW8ILP9hgTh~`irIUHcz{k}GSgf`wy|MHm8KMf)dXv$qc$6vQ;0#De zzTXl-QQpxG?2t4y)t)Hm!IJjfk8HL-fs{Y*t_VkNiiA%T6xyLzNgU|b_>>9X{Hyhr%fYY+Obs8D zr>!=8uud5WJ{J})t{3=F_e?|s;Wc1kvSR%nz-oE28xIC;WYF^1_94r$4x7kUaWci9 zWap5}#B%ILqMx!*zK)~eUZEfw`~Fx3KbGT4(n1>l^LNvC2r+ym6Q*G^8}5S3k&`X|rPodXMi$Dh#j z#8EKNXQ4k?p?awg)QoPBG%>|Dk>V-!Qo3NA`{M;An2-DxA@m17-?wdfS8t2 z4aHk?gXan68P9&8bT&YflnOQPSG-q@EO~c@LBi_Uju}glnPsU_WgeJZcLqBQb~e%> zU%Rdeu-0opLPCnKE%1u!6)iSuGqSnj-E>5|>}<-g_s z!0GUN&Ung?X)WOe5*cM{XgutjO0IG`DSkFQL-c>UWD{SE5w3sOkdeHyB_Xc-{pIzO zZi#OF^u<kPi%=S_h~qcPJBLMQq}HNzuu%vMD6}NSS&%6q$(7Db{7jO-Q9$Ed{T*;s(CZq= zpnSK_kWP0nFfkp?r)yLgFu)ku0QJ^{$gKA2$u?<^d|6i|=UnKGVxrpS1m~(B;h6$h z+@50-*W(yx3o43DVwzov_)nY^D#OYv_6 z5q9GH^7rptb{_#n=@ZIZGD_R)fuv}@@-LH-@g|_MJlkm@Kj%=W5tx_$sg{5!)OD96 zI5x!@$KAyNcled-E!IW9e;3)8%iWoDMkYkRxT8(8c4?lnsPKCP<@a8ijXYr%ynF78 zvE>J(1Dm0wJt-)P+;K?~xZ#$JfnrJferw4G61LRsw|3d5WW z0djvpHSA*w^VsA8c5dmcST)2wf6P(@f%07YZXD&&#v47c7L`VGQ^g|H#e^emf*(he z`mpKQezjOWRrvc|l(6B^!6%+#iNjO8U47`cn z*pA)tZN=3CU=IHHcdQQnY{=c-xQ<9eyJ-pa%$Eayd~|;7CDX z_&7nf@I93xm%h&xv(~pPj{0S6tYGdSY@25H;giBz2|-W_O^Bg)#H3sbTr7uRAE+VX zEpXDucb+VKZ0I00A1+mr|9Dj*jl*E>pBvZY?qUyJ?fDvF6ZmyEc{-?LIhYP1ECBri zq>_VplOiL_ss~TD#x^CFla;A0>FMYm7HV(`%LDUhk0SV4x`|%$kSJqWiG)2(Qk^bg zOVusrC)t1 zG`LdYgYb^EtFJzIjLW!1-tBhQN`B7jBMIYj2rZ6&X@FeJ+g0P6&01UAe!4VVCGBCoSFT09yST}JfNV-~)tX(Du99bzmn{q{c9|Z4O zR<5S#d3Ep?_)kI|0GPJ7k(<->N80p=`TDM&*H9bEt15jJ1gHU&l}qJ#cNq7>dzG#P zbPahExe((3qhvBtKn^W=qU| zAKeqdMQOrA~3STd@wEY*2Vm!ziG1<`X6o?*`>vQ&&)Vf zWNiybfRfX`Q4&ej+@i!p+09W-^|}i3WR9xdfTXWm!PxM3xIbo@wPxR*$J_R?ox0~E z#9nWPdWH+_T!BM^aO2{Lufh~+_W}rf90_Ha1_4-0rRySGrON#VyqX)Qu_ir=tx+9D z@jV!|`LhBGoR4IiZKu=X(s2F8XrQi{L(fRw*&ib!DB?h>N^FhN)3~9JW$nLJ_%!j@ z9(&VCeG5t}t6-D|UeNK*q-f7{ovSg<*)f)5^-{dZH6`d2TK@c|riGZ_K*dbY9U6Sn z|79P{C=t-bZOY}s4B4;p&ecSVBGm)pj+Hg}OxkEbOx#=QkSi@e6MWIcuad2yo|Ihn zol?Ec#0I7tT0CT3k?7OYQM3nr!a0Mf1f7=P*)Uu zPv#5-ze=`Se`R_k#DzG@zyJUn)0D?i)QulpC2QE==HpNI{4%K~y_x zkB$iif$Zm3En!6Dutf55!qqU(0Q6H3bIvddd9g8?nIBA9`tXbHr{LZkCc?|a)ie`> zXZ|@M#LaCa_%ylv26*_CLrcrcR3;ss+4LRqBN=Ki9wXNxL{FBJ`Bz%Ue6Fgo0NExI z%)`8+UiJDB{W0fu1gwd`Jv2s0eTcwGZ?mUjpQY7Iw@I6=GWZQQK}c9efO5qX%D6Qq z%|N?#gyAvs?=tyo`y3Z#^n!&}mCYEHc4DeAQn5~r7!-UI54xeB4wDY*M{2vSNxBqg zM%jDaIjqLSJIiDeD_%daVX1xky#|c3Kb|*}PE`u+B>W=5ntO;2{8fTKXAt>fz}~Yl zhtSCLuanVI_zM{xRVK4x_~XUY`C)LP&ry&3Fw}iuxefXfSVaj!d3nxZqlQIFWzczBs)AE!lxZoGoGfXfaD9Ez5$#KXoYr&Hjh*Afup(?19mDvyGEBSG#wkgUAUmU1?(!~8h7BmYT`!D6yeV}Q_0<9K&Y zuBf|J9Nq@(E3mJ5KsO?YJklXGyx6^8xYl5O57!G`;&}D{MvSPt@}|9e)da zy6;{m(HnuT~y1FJ2X6NY#-G;l?QJNt7^Ty>S66-tC>mO*9dK64r5f{54n$D-5;d4h;`2s z-2y50nY{-uh@Rj7jK5O#D_=3@K!OAz3SvGgM>2#vSZU!pv60KGFF}blA-m35WA!$p zmnWH9JLt-CBrgSp*_C#I77GSjmhFrRZ(-&({qD-@NLOZ|Q9$f#Wt?Yg88o~{i^$d* zlR8b;wR|dV7Et=81RKXzuC-a=dNK&tmM+3hkJZg7s=9`?ReM$P>q-A!=Pkd|TC>YS zik^R9u!w4(* zu428+0_5eT+tcNZN2Vg!!fdu0`C}F_Cyo5PL9z*ac5iYrHuqV{%H}1Uwxc0=awqRq zp}Ua?FL)gMEZu{Duvs0v;JX;oQf<(qheuy5-Gq@&-}D-V6vaKY01vM+U=#)2G4!`M zVs0{H_f9Ujq41uOG?yw7KOrTBEA9H$cPUt9sS~G;^T`M$CKs<*BL$Am-Sad{>d}xi zK{|>d7&?-pq!4eDm@`65mEb_S|3=rkIvV~q0oEC?#HoJfYs-m_GNMhpkQj@McYySD zuXnrT?XqtG^`-3X`4u8Zfex{kRM*=abmoQetFnn6R}Sv)CrBNmAZ^ox?DBn zDHr;$eC3EYp$uI%WP$~(4+5|1KyaRpU39dkBJnwnLGEc`7JQatS)#jV)pQu_pK@%t z`dZ+lk$v2_jtlC`e3kH<8*>o@(2~cQBml9w@`uZ05#W^3LE?rZJiUnlDc=EHj(SqP@nlXr9*g`e*f< z_K@J>!Vb}DldthCU^gJw zGZ7~a77?SD49Yhd5ZitsC^ZUO6m9MOCOr z=NlTLNY`ErCo@wsX^#;6>X^$8)88tFXqN}FUT32F2ARJPUHoZ!C&cUgUlRy^(4n#P zH_3Qtx}M^Nm1BFEM0M^u#Rqux%8k>dusvKUO!rqjvG-^ml=-Ez@XY-{>LRm|es{?- zzbR~Kgfu$`P~hadHklshB8WeeMCpqi+BoTvWoLSYTeYUzc48SdhyYolFiJ7pK&SF} z=tYOg=P>>|&Zi&OLg;(LGO7LdUI;6oLK7!9*&$jV$y@>C32EQnI1ZKT}*MoE!s2zSor@#N9rB+~5R($bP#&wv&auj&}U*=7?)imE!O zC$M>qvAkXBJ`?qF+>a5#tSmdl682)J=f~dzu@-uby#SZ|$KM=J3 z+jpkRpWq9iqN9?le+6`EUkcIhmqo1po{5Qx-BqgXC_ZC37Ih`P<}~!x-$BCan*Re6 z2zKN2;;es4Fsdy3u&!-yIWOs{_(a`5ra&__hXg<#qTTICA~UUjWBE)Vmc4`Sm01MI zU9T~#F>c3$8A5~d*$pcI=-WsbXpgM|G)*ug@2P6df64<~!k0SK0Q`oC{Gb4_~W^cv#8HV#?pJxt6qX;D;0=JMtz(CA*tPg#D` zx%s3%>X-9uBlEzU?s0o(Kbg6p*X-x<%J)a*J50wjGf!0mWJVkN?y_IV=!#snwi?N~ z|Gk85@!>x~#c;MXt<|QL-Dr%BR`L_->h&jL0=|p)^tz__wrEN{I6O+nVVn24Nh@mN)R_DSskAR8~I% zOb#(o+B+F}3n~;fleC7)B@lk*Yq6{N;UM~XFLlj#g7$n&HB48B{v{)*r=5Q|Mg-y( zQP_+i$-o*nPBu#>?C)ZcL!L!QxN4IPF^G5-;w-r7ruip=kURws&!ptdy0vA`HzoRX z&3O4z0GR_=X=8oBXexcnJ!tqhW=QIrK7;iqKnVn|d$N6K8>0wk=uN^gK&d0Ky51)I zJyC%PP{Jj)H+BU4=aV!~g}P2H3~ov<@NMX@N^B0mS36q)yo!$Ij}0QP=_K{KHcz`Ejf(5a@mqpIA@2g?WT55u(5-H zW1<1dJS$|M06IU;g1IZ@#t(QWpAT0}LL^^`4XanU+<*{?*3?QO^Tpfq%K*dP-cjMh zq0&{mEspv=tK{TlDj7LT&iAH&KIwD|&sAX=@ZBHGO;_l{tgO{`8~5zZr>9Wz3_*6O z8yCM3MDeaU-t#euib|z4^4IBJd^=G!is_AICcYo*IaJI7DwgS45EIZ{6zMoz9V#`& zhUXJs5I~~BPfYJxD9^XLKX)F zWt>0Wx+hH>|UfUb-;84X5w*kgHc@{7bwQ@oi5CR^oSRov48X^O6~;rjN>@z#@JVW zz)KILA!{I$fDTG#!sQf+uuy@TPO4}?Jrw`ORWl}!x zeIyJ5d69Izo7!r7IxORxK>#erGwmc)DpG|29{&?Z9{IjsxN^`HYX(Jg&7>^w`}aSX z{i@!jbt5OohhP&^3Uz%X22!YZY%Wb`@_vQ9{FzdbG@%(ft@ez<400O>CGh<0QCpS$CEZdUWziYdt}H_e#5JOVzqyJV-+ZodWXf;d%ccy2%{nI8>#cXKfy zE9jR7GfR%VNMr>zx~VXDthTy*Q!W73fAd~!d0!V< z7SV2H$;f8wrmGbEIT_z?ZfhXWCOM!L_;~k0P1|LSwcK#q@Ww5vNIpkV+`A_VArVD-SyuSzmwgwL0Rto{9IeDRG%8n5< zfQFqMR+%Q0xAhOq0WN za~8Ad%h1wh`maFesY=Vx!KNFf$}4c`T1Q8Ljq4aI?Ym9OI$Yu(7#IPp_s8%|+^=E9 zZXA3r$KS6Oy#8M&`sQww2$x^<6x|8NbX5!I8F3Tb5I(|3(BpM74E?Np!8++*+2_C-{t0ZBU|-W2CdHh9+19RfowhLaI&RjJ^tlBtx{>$b*Odo;-S(u zSiOYF*Dy1jE2dKZer}~F%ObIAr}a_Ujb-w5uk_EA&8}U)Tt8k=$a!(~7_-Scf=VjQ zYOu&8#&V>h^{uQdO6R+H(*ZHZa`TieeX+=!zM7yfNw$P%XvB#4`1lfoD1V~+QT61^ z@UVZkR+6^Iav^5nAYp6EN5L?{FqaCmG_mneHi^k#o*)pLOzeA2iud$$Dl{ZgE$QlH z*B3ug$;O0*X$-*ic}7Q5Q~yQ-@Z3udcv3)MMr%P#dO zU#k$Z^0@tY9pDg&`*wf{1qD@f=lyEIpOb~Hm)+;|kr=w=9iONuGs+RVzzB~Y@*J#1 zci?OUmOD6L1!M#7H&3T3rVpW6Hb#c%7ec=xnhno&=>0rH5ykAlRk=E&5Abrq$#&Kn zIw-IM+4|teP1|rMN+P&(GBs;T!PQ0py!|}?=Q+Rf)E_2R?uvk1wOpThFbjtZIIV5Ny&RfT7B>W#AFb6x~6o$~!T2)HX;}}<1j@R{IqyE;7|3p`YtwR8qw8>-oz*WlKJz&T|oyY zqU?n)*{)BQ&+cBDB7wszK~G|*gTsXWP3kLm3>b}che8}!i5v8fGM zyAiuinRf}n#wkv+OJ}+7GM`*IA9M4$+-X6%m16fE(P&*69y{4@{#2%hX;fI2RWI_N z{cNLMi#hlt47CXWiZVDk*wC>_wpz};_rm5Gp3VAd*UlJ$-5;V$%FD8^@V97UMf+pd z8HjlCm383E1;Bb46Y-p8jsB$2H{B@e%$4TzAt1p{!9uG#(i25TwVVXZ*VK%k6~!JL1v|P* zjOXvyU(ZD9JKOy&Y(#M3*blF0&5WumM76$)5qJ-x;^Ht~cqqIE4>bn_7Sir4`1kvB z_mn#{W*Mnd{n`n49kpJ(QG8vg|@ zGGTyD+;FX-UA)@VXq#|j6L=BJL94H^H#$}N`q6U-vt}Lj<*`~@+d6Pr*iBX?#l@R} zXKBcQ)5Xnt_plesA^*+ia{CVTM>7Y2G1$ AuyO?>RPRK$l>`_|QL(mP9S=b~%zIBlP=Y3153Gl?j_(t?d6#x?8z8VI$K-!c*}W#ZP4aQ+ z*g`+w@{_B6LZZJ~j|UB=1PiUO!#n0JXKRpo9d;s*H9|mMW3igY11B8pHWS_3)q2k7 zDgs8(|4j#d@EfmmY6szxVDTr({M{i<3h9NF+w}!z&Z5>sVdPnAJQ82>?`oOfvILI~ zdC&J^1-tnqR~hMl3Bq4L)kmlIyJAr{CxNeQq%wnX4=Onq(eR$u4Y`I%nf9jsIPzOZ)lZ>mm` zlbfT4Q4jGIwA0ScuAjyKf!0Y}S6jnGbbztlWA$nRrljE#{+Zb_^hgUY&rf*F#>O;$ z6diQq8GnLnR93VMpPyl2VVBq(VGuR~f&nvFOs75~;nYsWpiyxjJkld-DE!d2=#!TQ zCd+Ye5STzqgNoa>Pi*bH-gV-&q6F6<^;sQQ`4%5Y%}0Sn3f3SLw^XH9t4!U)?W?lr z((cnKm9LMfb$IVLEyF|jybozQ0lsZ80@uuD?YDEe$rwtT-?5mFt!bthd-a4+Src%N zejHebj)1eL|5-GD=}f+Zo`KG5{P_?z^pg+V?qg(HuPVcNUP*w> zN^a+qm?#*HCPdxt(v%a}VCi2(I*Iv^@t6^x(+c7m*r^13VHyAo&H1OvQ&7tU;e$mz(R)11-wOM;#RbH|KFfXW3Ql}LlbZoO z&*`LiWe&Hk$J;JeS1;OQwW4Lf%&x12<*I@@DZPMza_ zr3H~WiY;jEC`PHj8*3T@MPCkf^m(9C$0HpHaabtoFi>x%tBih!QD9rZ9pTHh>e1kk8V^2<^SyzSV5A2| zr$VMdmX|@`woWk726X%c^}=+$`$j~nf4>C zz$R6+R^tGvh7|mAc*2%rw483g`VCbXqJNFyScIa zpsXWTq5DJg=5;Q=ej;(DKhs0F78(*&GuDz5IoX&J2$?1n^f>9}rFbC@Qot?_+qBB4 z#52Ygln+dBVX~}PIBvrztyn4yqFGsL%o>$Zlg3*-*7m6k+hS02wEDtz+{dVT7n?$2 z;o_ye_>dH$pS{B{FlB^-4Q z3;$ZE;$)hNDj8)G27z4Lj&)q$*HPou>q#AC665(P6w)!=-ZnjMUPrRm^V(W6TG6Gp zZy5YRNULqP0l5(8*}f19z@h3Pj#RYy9R3ZJfzl|!X-Zj1Lzn;aRE1os5QsHCvrY)e z*7V}A;*e*8^fMqQ7=iyTacK0S!NqBaGqH4CKgXxZFI9f6G(2=_?P5?6ilkMJVsr5H zlC@_6keS`H&vkp^>>quKj7e0K`my9S1y>#MPTr44<@JJCXiK$3S^G`c7~!-Py%Mb- zSRar8T^Tz0z4Db^-=ZXBHMfG{8H>2)n0XS&on|&uu%_0o)^r0EY zeg7!GE2_y=daFkS;4{0rd}1%~YzXX>ljl@-{O!XT77kiE>OK8@e4$`7l4%cC>X!p< zzR=O2cj8g**#xXztXhOEY^=I!Li!QX`1Y(E(ufiK_D%U}4d1FysS@10E#1&epj-km zAzga(cG`a*3pjvXR48c(4+`}v7ewFR2RT_BdPK^lQoa5`u#zC?^NouZ;b7!^+V(8K zJGHlh7?vT>*~+=C3j%}8rVcjD^8kd$7?JqKY|QFSxoO_0PnfLgNMMWa9sQmg1s*16 z<2=xqf(Zp>L`02-O5f;>e0Nm&sxwj~^BAqV5P9xp)7@=V)BY-EW=03_< z_s*I@DhM&QY}hCqoFeP!0?dNbS^zQ|n$Z_Ifk6h(r(nq$+C7`K8Ru)hH7f`ah#0hP z@45SerIR+<<|Mhw8PzmE0r9c&xK$822YIA}Rx`36=P!u))&TS?@JVHhg|#Mjp+b&E-SZsw8m;05i*pC=x3lZvH+0klrUX^>oak;lkO%^ zv3VPC9t!~>umya|7ru#?t4>de?JcG&*3(qqq0FLTM`GD*Y&;5}kSTIZouT$YD5M3; zFXB0GN&90bSwSR*F!JvDsmJv(A&B#hp5GqbEhMX?wt=Uz^#lp>V$GD}K5bx}N0a-N z&h_@B*ukg@*-{CzFDw{hv5p{L_zEW%1WViQ8ZQaAxh%To5d1_9SX;?5*MVd5LO*u> zYA780ko1UUPb~Egk(n7YvTHLi%?|PDUMA*DfP{yepHAZi%6GmyM6f4AkPk4U_0f+6 zQ(sw`Yp4A&iE*;;y*86?nwyo$w4+zAdQUx;>v@lOu^e^iu*J9bCN4U7;XLVB{nNJe zAd0$R_ ztYnlma!FckBx6lmDQAn*u`?*~d$STh0^laY-c1^v7uyWH=&(rmqvlsTh!j zgX~HKk$l~AsSe`?B_w(u|F4dEk2}s|eeP!D$Bf55N-HHrfz=_iISMnYr>AlZmzaPT z5!j(KZy+7=EgC{V;Qd2NPFeCrc(`1|z}`-Yn&JdXu6XgwEQw8dDyj&wuB(YQKJx-G zQPEzKOilu#E5G^M2wJzZ#GOfvwv7yj^NB~to5MUI+aw)ttRfxu_iY}9^t;ClvZ0~Gd@VXhKJ&isD_%?XbMf79ow9mLFn^dTqUz@Q1M`0-AbW%vQRYYSWb-I|oX%?}Ky zQszt8d`lbn|D&16RwzHsXG3nY z#Aq-5lUhf(_0pUv> zinZZljF@S0SLsH=Yk+wqr#cnOUI$yKINV`|8J09z(t5rIP-uDpjqDhWuIqVfCD%6SLa#=6r*4JKn*>B4xv9-bDq8pP%^ zmUET7{d_Vc#_iq8WUkiLBC#-k^J)EKA5}a8ikpx#!N|eB+iDI_jj*rG3)K5^_+x#$`_l6P~WL7<*VqQ=nnBhZV_W;)aL3r_a-@VPigAWTbC6jJ~Y z&k?{SwOb3>OP>iZGpm+LKCs>Ab|$sP(rPt}jXYx0bQU+M?(0yhucp~0m=LS%C@rDX z?M$Mwy;ZYfm^QJSQ^RcY!}wy?;{&TzU0?0ZNkP^Y77R;yc82&pygniStG~x^Oonz`zAud2~#C*OvICw;%3YHE$ah!hmWud*sT-F$oM#=rE zV!f!^j&*AWSd@{@F(^LGK{-!}U*^$oGw}9)fq)=v`#M=8m5|?(7lr9a@Wm37I4v6O z6OgNj>l}%m6?nwRu^fD^R;QOw!tR66h1YQ0muWh4Mbf>#!Mb0ox58h`!8XIS*j_@J z>cQ79Fq(?6TLzW`Ib9B4^*ID;)I2M)!!aWn7iD|(cGs>WAq2Y7AK}t#uF>8&7Z*n1 zoK=$|6)TCmp(Mj#6(a< z(ZwmLyPHmJ%+EsOt8!1lS$v{lFC%zHtNk0SkU$7U-g@ZulYcfStr`&NHj_N=;W6t_ zdPv1G`P_GR759FecoEWAnIz}*t2V?xG%)&!KZ50U0P1Q_&)K6#0bqW53Re(qe#I7O zdR0###(VEnYR|S~jw2mePSpwvDU9@uXE?(ik#B<1(yFYj&|iIctC&|kq4xO_F~1`u zLV>B*8>WUHr|?G;UqJ_sTa>48WeoKI!v3$Y%;#*#$P28c-FYRE#g@y;7jvB4Hd6%; z!9vfMyCkn(BlWn0WifD2;voQ45=6sp)^;Z9-SI8AC$*^4)yqDz=M1XRPCrYMaXzl@ zrk>{n2MhS(s>ftHf^Ju%ar9olqLSo_GzrW9tih~V@^A%>P4C^6=Z4O>dLn<#WYou? z`aALC_Ta4PdHHJdbkP89y~VmVs3|=O<9CWh$z)y5Spa1P$#NVa2#3X~kS3eZ=GU&> z*myU(a_b8=DBnRE+5`pArrKsid-tcLD4(M(f*M}2%dAoTd0(bVtCFqmOxEP_Xqa!~jdTJwtai7OMoQdyL<9#{60k{fD|CMy<{6ZW~Y#mqX=M3(NuBk^S*3 zLMPL97_E-LuU}030KX8!;x#C6@ul6Z%4X&ar}J%`Z)~dT1JE+Y8dl6zMh6v@>7MYd zQ?ASJ-ARnMh!)PMS^tirG@WIPJZk4u4S_n$tKj5cJrArz~ zW&RV37nNh92JPKv58C&Rc`nSB!A^KQCM~MZ#9QNELlgk3CJov3Z7L74o}G%GNMA^zSS8 zjc_QvWDEJUbAri>(3 zx=MGA#jv)uwN>SSsF!rUO9)_Jzc%E*sf&vhHH6N%IV)#pG{Yw+C~CJ^Q~e;X?i3eR)+(d6|Jr;1JcFH;N=|~U zIuV=i(hsrId9`f7Hf0D;O%3C}OB%J^0r1>^W#vFy`hVl0XpN;lY?%clZ-U*fVD)DQ z;}eZ$I-xnqz{C9XFA%a?Ta82L1BWXWs8>A#2Xc{yR~7rS%rI7)OFrDUlIj1m-fXoP zbQ8%5y>o=0;+;-9XiD@?ph?`$Q$5+V56S)nv%wr6=Pwn0emgD*GH!D8 zRJd<9569aHq16SkAKtRt_U!ecm+ga=s{Z;e!p3wyeNPOXVfF*yu#13{cd_f<8+s5v z75Lw1#u}`x*{G>zKG!If11o_%A@Bwre2}G-dH(#l{>X97x#>^t^Hj`o+Z9F#B-Z-R z0NpV&BU|R8be_!P*WUh|UP%u1|IB)NkBTI*7O@JIeGGJQ2=?Gk1+}iTI zb$8LVz7wD*wnQwqw|P$hK9=;WFW^}VO-;TC`JzBRQ997={Bv`5uPYYHcl%>wlAQ5V zZI{^CaJwBN0<;f>okj#eOlG_rWTHreJAD6!gB3g4IPmAepcX*RO84mV=Qk*igI-7a zo)nO9A%~{+n4l=ZE50D|gRB-vec4~6)Sy59oiOQ0(t5c zSm66-;qJOjr}gc5QgX7Pc{G1_cQ^N@BOW-f`_&~TMt`Gyn8+ZiU@OUnK_cLb-AKeH z|KAgR)kp{;6kZNH6Ch#D`0AdB2QBATo1b&4=i>)@q6NJC{3swm`31Ob34pT-2QL5* zkM0~$$^P8!_nZ5F;esA|$I_~q&8GbG_lo)N-6OZCxxj4?wxfOb_Xi;DBRr(f1T#%E z7-T0cGd{hB85*cL;6;(~el^f!t{@!HiBJVFf~dioH?Rmeb009ZbOAC8%V^|j0vPZo znYrkXf>Zgh@jZoCc;|jdsT6hOHBpmOb1ILZ2+OfG4N3^oi*{Rh0;0k%%qH0X#n@Yh zRkihfqk9{4r$|XRNH-|WqNI`TkS=KuBp2N&NH-GF-3`*+-Q9Htd*Ao-yzjZrhx3gK zbgen&oMZg!7e|kvoY<{hs=cEr6?s7VehU8kN_%QcHd+G(Pnh% zkS|V|d5VQFi|#JIW?RMG&*g%NcoWqQ$Z%ey9!`l(D8~3eg)@4)udp^5w8Kh%%<4}c zJlIYOq6t1e#!F|2O~a*eTbG#yGJWW-Dz*he&-ytJo82RT7T)07xBsV#f-wQ6q4;D7 z-}U5l0*o8qewmQKU()FX(q44mCmE9TPN3|8(6GqgWZfQRPk-d?1?E~iMalM`w>0Eq zYwrxal@%k9!D;&a%i_;20K+=1jy<{IZw%Hyi2=?A+5OGgRszc(AJo)jNmF^E3L;4?YFXB12Z;6yl|uDFeq zyI|65SE*+-#L#}m0P>(+eUdlPkfk@|3h26K)UqSrw(GG3~! z6+@#us{WEMMEA=~12drhVgyGH_m0_}spM;p^hM6DjZ`_>+qNR2G*O$KTNbOO698S( z5Q>}?0mEfW(wvwEzpcHnj~-sU^Ed z;u#YL^f;K7=v-jQaAeae{sPL_NI*@YW!Eve%;?U_{*fpE0Fvlby8u(fVCrw;^PTbO z|HA2}%csOMRwfFy(Ita88Ks@AJ`FG&L?DUM?1Ov#cH&oXX`ob2S)*hZl}kKzSioVU zqLB1#7Y{S(BIxhhtWU##&h;~!UiREx%>E8n%)VEhV8klcbdA*qid7dt1^5Q+Z zoPTLomS@q_BDS|Z@qHnf{rx4(yZR#Lth2Vt(3C^-bR45 z46DPjrRh|iOPu03IJ<LbC9P0dMNO%sj)7@B2htw7U%{Fj{}AC`YWQ}3ILM< zY%%@`grJ#Tm&KXHR^nx3_Nf^~e{Bt90!X+369xbU=hMB{9{VCU?qq?1HNL^=dZZEi zG@G0LNfU)_V9Eyoji2+O3Z($_-z)eIxR90z0Yu)v#}JT16#~KwwoAvnCG?;X`?8(> z**6`iQ(}Bu3G?<~F4bWInM87AOi=S0iJhEV8K~t(*QqInPp> zOO>i_1phW29{)BO`q7Y+7ZnmBrIbznzPQ z?)yzQxiLYUUDDla%gyv}0(|{}lGw(x5XE}BwT0iQk^FB{ATgWSPfSbzAP%N#&5Tje z(PeH+AMg1sapHbyhJQnB1^(49_~xxc5_y`@v9Nq}o)Z3&Lq%08`XoE5CJvyo9YCZ{ zzCoX#JgerXcH%&>*Z&}m@|#tk?-Yd-fZ@_wCbKMRiy0aob#+}%XYJU7Cku5uA^=Yp zcP|+~ys!{)KDbtI(7*T@qhFv}Y~c|-JE`_%Ru4o4k?tynVkJ?UX+v|fRX;&M<}cE2 zM)z?0+WJEn_T9Y#K%TI}1L!gUoQNh|Xt|;49{LyoOalW9>UQXu$^A+DFE5Gkz|iR$ zXX)g6G;J|zTi#e&r50k$oYk5m8anZU-kbg-Phkh?ko6r<%jXQLe@g^L;GZq-G|G%$ za#$^f&AB=Wk98rh^KR;CKl(RsaMUnZovCDL*0Pu`WZ>caQnRNhABtRSB254|1d~_t z1wa3hq^Ix_4j%HCnL~Fbd4syZI}R78Kgr378kYIx(=U!m%UOWw7NLukzxT1-?y>!c zItB^@xvGqy6>^uACI0=d4i-x=#Yya~WLK#1YWG93Ln@5R08dNgwXWSemTpPca6Z3g zvr?KAYV)@Bn{_7u$AbbF)Sq(Uj5aI>OtQ57evzls zU3&P?MS+mi?!S;ZUxfX5`)?wOj!F_2;A1vWlmDzcn8ayrxS{mV`g><)B z-``p0c`!9gssw)M|E4S7*UkP-R_g4|;^;rWm?!{Qay=Js@B|GF&BW2gXtuK&u6?brF?ml}i;AtTzFQU?l}z188@s>=wTsZU>Q5 zf1#^50rWr7KMifqm&v?!lK7{}JLLqxbYTk%`YyTDAYe1I-goNtbl3Ge+(%l279Qx! z!=W}i2=hYs#tXbTb%;m~olylY5CD!RH7nfx5#Bk8BQOIC2YL`;Cd&idUO?_d7?dE)=a-&&pGu10GJsTUx@0B{U=deb>?uvtu^1eZHk_PR z=u;#CWSBdn{Ct1k-_j`@s*eKhOYhM+mmc{xp>&^J0SYXz=E>-{pq0r(PVuC=I#(*y zgQqpc^)UhHsa)>!egmx+jEmjzm~$BuEp+s)=YV9yPX_#p%J#mY-a32%XWsMUjKa5= z*?UQ4LIwD8&oRG?Cq~2BwXVIsCbu$fSD@z-e=B5F%>l$CE-e0EkZh>)Q?b`d?k~YE zM3B_JvN!O$IwOWdLa4IKlC_CT{TcBohEW*;L(lU9R@l|WWmV8RyknbKuo?KV_wCz$ zWrPB9-LsC7)>(b{lG{TZwlw**KDE2MT;CR9{nbKL3H0BWjPP8S#%k7vHX)`BQk4N7 zIv(IQb*RQg=d$Oi!iLW~#n(&%CAVt3zky}8gf1NZfLGfVIq;b<@Z3^!z_mVFwX66c zVE^n$G>3qQ8m}EPkSAY^Ae(m4+y%i#M|Y8u%aii%u$2a~u5_o%-s+uBS6{*#j+R;i9#>7@zz3v1NHk6E6Rz;^Lq-4;_Uya_^g-;L?~#NJuJ$M4 z?Qs}8OZZ^{|H{(iqMaJZ@|M|YOI1*Yej3lG&KXK#BI%(i-Btm*<6aQB^P*R(dYdij z23%GhdjQZTpXsU$|AN`;1cDy@&rJYVWB7bhoRRU{T%pmkwyoW$E=3y+`D8m^H?8O| zl(pKd!v{$^-xNQ!OIhE;g86b+VE3Ug5ECpS2ph@wFb67Xe@UkZs9ttj9!xjl%JJI? z(#8$Dm%Q_DbO&e;GOLVWf1-!1wn9i)jTM#ect^Ze}B)F?$=8xGz#nU^EE9uH-${jex*M&+ct6NSEn5xaUn)>w9Q?F}vR~?-I60{+GX&fyGfy zI5wU;S@*i37C^>k}CsQ*B+mj0JXUlBbYSRCq^^`!j z&b+-zRe&#&FR%-vn_vbq0+dp+03hWH5<5CC%bMESj4u-qYSo+=kX-qp{`+X6Dx&XGnEud}-Oa~5Ks&ROkUT0VaK_}H$Huq;LoR1o>ir6Wd*ML(~ znL)R@xnKDDd$O=7%m}-kR|*3rpPSwB1jkQ0pV+zRU3mOrJEIr~2a@ODWwVoh2D*u2 zF)Sd7&O>_Z6pnj>+!lf1(D4?)>>p&K=c#8$#UeZ#sR7U`wN44rVY7K)76oW)jZG37 z&jhWnV*w3Q;_8cC1Tc>iqwZV|KT)*ZJ;&?a(`w*?nV-b`!JCDUir7k`1{$(pGUgAm zndhoSdx0lijhWM8u?i6}t_Z78Rq|*x?^6>&s^`Av4PiBRo)^<|KV&i*BwZ#?B%u3; zJ|bV1r&#a5pDR>be%e?}05b3P&ObIq3#Fo?ZVm^A9jbIS32v#th3nlsJvg1}^BDu7 ztN(G6`B%y98bm}ybZ5$qfUw(0_Fwdd z*T*ZT)$b#=d0(H*EeW-a2u3(NAVm$)e;A$Vlt7vFkLih~6vm3c@>A6y5D(Ody59tf zpba)zHSXPfH0gJd`^^fT$<7w^7;^WaOPd05 zp?Ls}*xKGsXasR3qo*gx9$fnP;Fjq+(RX})-jZm)1zKBPZ3_#7fklVl_+|n2HU9RG ze}nNX$^63n^2UbI=}o3i8jD;^_hB?*!4^{to6DV7PQHhOj;Yw;#_tWq*7iLcSm+kE$=VU+otAFFLHSEGuVD}ZKv}#3 zl#R%Lb9Uoh94^8O!z@s?k@W`VP?K?SO;USwe+t5&h)9W|*QaLPMya;hp>4Pu!TpD9 zw0ZZ`zKU&LWKBp#e~$s=*I#q0s)9~GD%ql@mS#!KJO-yd5>x^0Io?!rxqA#DK`L2h zSZR*)Kx;e3f;oen#wHUEBaErx(}bJdNH*s*~DASioL zAGcm^+&$aANOT&ZdGd9_6%_qU(2oc>;JsS)t`As!&ia7W8tSm%&3kC=hV(QSFRm!y zMXELJuiR16jpR_@;DKOa7rcg#Y2^XwpShMG-|Lr=FYkg2TSrXpe9h!}H>aY1sL0f} za2r!k{<C?M8Lir%UeiF2_!K#`@YsmF3HqN&rM4wZq%!g zUldRR*`ITn8dUJNx)m6HI#3a5iy@)tssFU+d~b^R3EVagwUM$RTDhG{@>Znad2ZmC zUC#g`H<8=x`zO7 z2{?Xw8v}12tqwCbu0hr*lQ@d-UbJ@PxhJHNfSIV4XmQ=C)fTy3`0^{Z=-&#Y4`}tf ze|K1VEI?=o-k)mE=fsCN*S+jbhb>m3Xl{>KMS4+Y(Wzd>s7$YeGA#H&4XVA6_{D3~ zXa2xIYW1sd0UOYTkq#{t2as^mm3G1VecmF?3i&P(WY9M0rHMb;^b&|=mT7)G;dD)Q zznr9j30`)l4fD9&PfkOB`}M%hH@zJQV~~i5h^!yLS_QBi@u-vt+KS{+z}md@ZY!a_#NWM5-J3F}%%cB2!INwD}Y zmw0b^J>!4qk|H^2&-W|7j#gNHZjV({BMP|}%gt0!khXy1qWYZ}TgQPjZV*-OXL!z3 z{a(&3#~;r6FZ4M>S~jvk=kHnSR|GJY=6wjlPzL1<`P7py3o9jSUrW}mf8X}wrx02k z%u<)0y|J<)r$MJOM4H-27%!cCPP+enn+XEb|?WOiv4N|zIY@n!6ezjl;( z%&XT|))IK3Gt(Uj+5P$Y@0UFf7w7c}piP0k{i-GgPBCr9mUjIshM|4Muc^F3=T4Ju z9L`?)iSTTtp)K2L=!ix=A%Ko2xXkDL_jAU`83OTA+QRpm7;EZI z%{M<165jAVoR4Ar4e5P)&vu%?Y*19$KtXX2r#}_`KJB!-@p0DRXOs9dMzJZKj5(z!&|?XGg$=%@8Wx=FvRc-}zil%j2qAK8e6cn}mSF z31QO;Llzo*1Bh?0-}|6bBFP^b2_n%&6oZH(J~FoKFXc;6(OYH%fUx75I5F`D-bz$O8A zQzI1EKMW+)zam?Dd~@V+&kooZxgWpA2nB$Tpjm%!DlDO2R2f%a1mB-_C=J|eKqmNi ziNRtyzU0g`zF^tW1zPpV>rA1wV)hM{6$L}A$D<13(k}~?AO*k#J%l!==8#TcO{T;} zQ@|`oT__@haawLCF9*AqXN)d8=!T|o>$|0 znWiHdHnucx8drOJC7oCNwkoN9e*?ffc=v~k>Phv(PY&%iKmYO_Ao{Zg7gu6#SiIq- z;7ZRD>t;{Yvgz?7B}G5Z5Cl>xDyp**oAOC30a%Zh1WCCx%*^NjukNonLR#ZCt;>y4 z4mxOn@k#{L>N)%3nSy~;ZVlj=f|0LyB&jI5oOY{AQpzCjRkO~$FUUl6ds+l0IX`H+ z^9ej%IsuU(*sCSS`sc|osBs~2^F_Uuik%%sHdAPtEP)R66<%_7AlT;^?qLem;%3BqU=*;gAQ~e_v4R1 zsqL8~NDh0~~y_89POa*t8 zGy8Hl#5*TwaBx4eN7#m;-5kJJoa`kupLCF2Wqe$i1w-WyCWEd_gZjy5v!;v;gX04^ z1CXbLaB6$vP(a;2HxJ-bCuL-29DAjChDS2-dFO=gYAj{3SdG%Zf_c3L#L*ew|1g6_ zVL#h*1L0qygHZt_`4PShHaSfZH>8`k z3q1xw5|EbZpY1N2NhaaB(TJ(P)NI~5au9i(%Y#+Fg65=o-u9~BnP`Ryg!>|gC*fbJ z2RnLZ{S2a9<*=!Ax!-t_#aevCQgTN*W)j6tTe+9MZrH33JR+ZqO5W$%-YPZK$BQpg zLnK~Od~@Bb0Szb-_n1X z$TRkc?z^Wbe1=gpJj~kLIN4VyU}rC904a@tpKp44g+_odM1WL$#-K2}P+V!L6rgy2 z)YNQfh@pN5XxGat@&kPC{GR|=vY~-*`A~ZwVx2a48#N+ewJCJfvb{Y`*NuaRN7mhs z%g{e)aC!>iCjuh8J4W>*-Q~3R`^f0hDZ&g z?}$=h_@+cZ)z>%6JS-S-3hyIhZg)JU+R&jE&%3UDlmCV6>%59S0KM1b48{6M7sdo& zv?ucHpKiFBDjv_x7!>pyi=sC;0FiiH^ZGR1xwKZ`m?_=|M&}!!00RHq2_O{gDroJO z5b1dOsN~3RU6FOh+=#7ckK>UQ0&S*KDrV-g96ii%42p*J`+PU;*4E9`Znvn6_)s+t zD|-m!oV%mMvn8+eo{)JsHGLsWZ_yuSQoXg+zDMlriPSD!{@pPX@A$QJWo`e7z!2HQX9tY+`Jjm=i4 zv#WJHfY@DQM|#VZ(uO!f*fuCIY(NumLt{&epoACfnr^=JRl8cDJ7!x zs^SGj0;%RG3=6dc`R!nAv%A>re96twGHc8cLaMm>>I`0|ZCX5|XfG=l8=EFQC&Ano z`{@2()5Q3{WQcTtG`O9GJJl)EQV?kDNeU2Ab(5YDwwox(O0peg{cyVq7PSBZA#mY= zrA@Wmpr5NS`{Hl!j{rPQ!1Q(WsOVMJr`9YiobgeBCLJ6dZ?F3-|N4bQ3{V%pap=#sdi-U07atNPtU0KdP*K4nC$9IRQ=H6Zq0E(l}sdg)1^a#CR> zf9#$@BMTs5BM#?>biMdt5T-0E?;$X z&eW<-x}VlNyOXnn-YUX%HnEHcKa3277S0e*W<-ZGHIxhu*`V0=*n6U4ymLC=NIkF&JtQJizU)1VsIbNlb+@%mK5V9i5uxlprqi z(O2V>6KnY%u&e7;WQge*7*rLB4Hux&0X=;X z&P6Vhbj4f(_DV)B><%PFm^spGe_IVRc#e+u?}M1WKv%3n21(s!bmcu^$lvuhyU>?3 zDOmI*8^QOo$Ur<{49gzV?7GCnr8Fn^L|L+(Y~Os@myj0i_3+&hEr5G4=(I!9$c5^XQ@F!a2FaR)oRlgNCp z(`(b6sa#x7`!%NHM=#vf?y30@8qS6MTkE>VFEEr4Y67#2h*h&J$u{}pOieQ+EQ8WE zqXuf&Gda>Q0>ZG6tk=PBUroZ-D1CA+w4j^pBp4_#s}cc2bq zOBC0*GK;!+f9lVz_8>jpD3^>(#wldl`{|)5 z?T{Hy3PWL7Ckuass(FcJ?1N8qgEpiT4$HVSf0^P}a@lyQ5ZVbT*C-bGlKBiB#KXEa zEC>Tl7}F06NhTAPP!pT#tq*n_P&9t+7-Qo=&3)1zL}OFQj)vm16r5yCY^-7}-+i*& z7hBu0nWG|FQ277nhly;bCR#Z`ljzFQZcuHrz;;(pp?YTq~JN+;!IP&a}KG z7caXNbun~mrQ~rpD`ha^*4@ZeeK*|ff1Ag-o(Dd{(N@YmJw9B>yRl{F8z&2Ja0cI6 za;pBZwqjF#6G1avE(Vzt?b{2HzKb2~Gh%}PtR^(a2YV&jgSv$lX{3G?Q$C+JpU zqB(3mx{v>sx``fXEKTZ?Bl0LZq^|c$!ZRmOy}x=#l+BIKk&c7D>N1}D=(E%DEt;at zAf}9%=@%BS(uhhPg-_IPatu)^T^4X+W4+%~RDVb)crxaxoDb}|=i(0+`ohi6blt{8 zY(y@S^Il?tqxKeu`r%u!dEwX!UGY#kmSw9OGE=w1l7s!>($j zhoNH57Jm#UTKpkW%!yay9r=9CiRgL3LgB2j9sm!FrIXR+=D z#LnEDmpr^W7aLCqxoC9Pdkky`*#)PHt0W)qb4#yj9q2fsM)@UpqB#Nu1FW*u@~KvZ*<~HW{pu~da2}Cn^1)v=#F{bnF|_` zoh_?>rlBNPX5obdt_sMAY_>+Njju>bMA?ud+M9pLG6X0f2dZSeK8LavB0?Hl?1U`+ z#emp)$9_J6*=EIqv5EP4-}(9d1Q^QQH%arnAy3KYvp+kbSp!X_#)Jkb#e+K8Mfv)n z0tgWi3*C)dR2Er`8Xz7WR^a26<-2JHjxIKgTepm%fu2 zWovMh;g}NE?^0P$tf>YUAg;=IjpZ&#{1UYwwL%@iU zee0wd8-16D@x*@dsCe-hi%9QlhR=88Bn1TpVt#r4FigT&=%QeoP-ML%$rlSCXDXT` zcYML2A;B}Aa|;<~ORDZ0y{)tJz;dgtt-TFg)zZ^T7vSN8hs04x={6p4Ov?)3T^7+# z%L)=!;o0lWEyK7od)hC|Qt*gTmtzxnebR+kB7_V;Y#;}0qg?jMXO)GuDt&j=UIjm} zmLsQ*2L>FlGYn^ZZ7A-^2L+OP`@N&i(j^IW`Nf~xMw76 z30>5;P@AqX*5c_Wirddn;jt70gXWFNP%Bp*+%|7YvtVgAg2I!Fue;;YRzon&-#a_t z)!lvhQ}6KFy)$iBJVD&AJ4jp*KV4%5m%uSfW?C+p3vX|#xV5S{d4jFk*>MHC84@Uj zc5y+}zVnWD4b+|T|EB>ez<{$Ai1ENc>^kEYt_~K z$D(b-SPG(=CGDyl_JRRDB2?HTTBN^kB8RH~_aSp@$3*jW!2Ie9M|63y(pv4aNfU$o;9v9TwE4)r3a(vO>z z0}SyH-IL5eNnw}=-ZGqXLYE1yWPi62cZP3{WRAFxN}49Iynd{;U!kM%_F56TK5Ty7 zglRW`p5Tk_-@v=bDikU1^jAA<%<72XP&b{^P{-tr+exO|6BPEz9((?R<`x~6UW*e0 zxoJ9ll}JU=LD)NltCy{5e;>&)ECSKu;zHraFZE(;BfX&GglgT$lg4x1U9D=p(+)+O zi4DOPhUQy50kvaz4$IJA_BbOWV9(W%n@550WEJ3_HLe6NX?xrCPN-@^HM43YSEGzV zZ^uF$mn|Jn%H620+S1T+G8LxU3Z3vrPB4?dSL+Klfm`Y%IbP(hV87jJE|v*#MKgNG;7&OF{zshB z!30AFoP2t(``CBGtlnz3CZ4#Kbvkv2KQRr_{`B2$PxcI{^%t@OI?O1z^JnCJ3$Re} z`}>vryb`Ig;_HYQ{_$%s_j?VAz$oN?4S(vL=w)&e2vn-)yvccnjFyZa`R2!I>3YS+ zmpZ*qBTX1ZOEs_kJlqO*c3E{iUWN-i@LldNOOXYgCA9lbS znx>VebA^$JFO1pgt2r1QK~9y^!Uq3Ky~xc}VpVhdn`J8PID6M&2btaufr;w%pRBgg z$xJvY2FoiYgZNyrYHIq`bs6mj3CKZy_-c6W)6q!Gyl8b(aekAC%tUmH1Nmn&pj?>} zA3D`%{Zy|y(e>H1FY*so+6$7t^qiB|LQ4IEUkjCk>}TefRMv+%UDrSD&sV~3h)KY! zH`}uEY;9%ye5dn+l}awUV4c43x=aHs84kasPl7ioxQKc!6P6ZBa!>(pQ`lA+C63r4?cmO0oV&GWf`=QP5Kc0GSCl_h zsoCx_b&<9?&s2eZ}@iLTU{7oYi~tX!CM@o;4T)d8tfc zngC8x`AgU@1pl|EwyvdU{tfW`*SyH!-yWak53L>FEy(XQ(|;g%?J{5%Kkw@>`A$vJ6euX6T6md|6GsAScOZr?HY)Jikn zzZQ;hk15||5RMthgR3U_ers^lq`$wU<6Vi*k?D5D*wY`nFzh7zH4Y)XysCgA(Wlw* zj?sapC!pVD{b3?-!1qWuf5C^u?CBBW=o1kwvHU73fAhPP1myRiQKpQT9-sUhqo`7c z$O_)wqzC6QIH~%#d*}Qk@;lZom#$$P@`mKu7o*}Q3}~sToNZ%k-p6dmR&2byJ8l|O zOqmMAow&j5W!1i1Y$Cl9G3UMNc`r!{J_^=7ko!tV+}`*9DjR~6F%S>`q{pCQNH+Jk zpU26`s?qT+iZmi4En{brBR;cx&tK2yio3W}F(pZUxq^^F=SLD6VDBwc8;$8t50`!H zVz$KNfrZztHfCdMhgt((U)Of4eKY7G!9(1pvWOR;v-7W2OZ-JxR9gC=7*VtU7*6)r zlzf&RNKHdqZ&!BYOuvel=y`RJI~K8X*tLGjIqRhl*0m)|^gxG`SKcL{-5Rg5;~{v% zu1~#~d=+^@z`i}P)>6lwNO{#&e|B6QkoF0eE%W2h&6cbHHh7D>@Q(%*@fRSvz|taq zq|y9ue^mS|V#(*jah&$_1rt-4-HV>VL1PK1Pn{TX0om_8FF`VTt*Cj-*OH6_X4FFR zNbL%rYKOnGA6_2Zh+sjB`}1#mG*NtW#aH(1n$S}ZncEcI<=FW!Sh2m~IP!fL44~90k+&yUp66@Hr=FB_f?l$k- z7Dn#gepTitttj88p*8YQ=OL{h^V=xoFfe>7sSC)+PR~cLlv(-ZWBmPfK29<%vGx>! zPPT4wR~o|@PUFoHJ3D($X}?bxi|P%(xb`SUu0J( zdx>zjv$!1%^+^B8O^)nY%5=hC z@+nWR(0RS)v&D&1e;bz+V1IVItzy{ta5U;7 z&xbuSzO<*mLq&=A;%eFFSXcJG!Y66+FVElqMc;J9C`F_=X_%FYKb;qkQsvOO$>B!{ zPx)dz;$HT$Fl`=c;i}P#AUgt(V+_>Am zRi5`jm5z58=NiNPsRO{iwWjsFY!AUF+>w5`-mA^ei z#0`3uAFsC>0rBCd%m1g_!>E2WGp zW(P+o5t_4pcNE2$niVO>UPevH`Bh(4iaFQe4tAM;(2RIUVgR7#L@D5v2f@f}|6ArXqpr!M0Ql1G;wffN~CTZ=+)-(ea3&Ws3D(HQ=6&DcM za42_tc~=SE`(PK{vQ47G@W8-

{frHlVcrRYkgpgE2( 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 xeE&S$1Lq?Aiz@lQ1KIy5+Wr53Xd(C|1{b9 Date: Wed, 17 Apr 2024 07:17:25 +1000 Subject: [PATCH 2/3] chore: add comments to watcheffects and support light and dark for background --- components/content/simple-editor/index.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/components/content/simple-editor/index.vue b/components/content/simple-editor/index.vue index 26ac6af..17ebbd8 100644 --- a/components/content/simple-editor/index.vue +++ b/components/content/simple-editor/index.vue @@ -2,7 +2,7 @@ import { type Object3D } from 'three' import { TresCanvas } from '@tresjs/core' import { TransformControls } from '@tresjs/cientos' -import { useElementSize, useRefHistory } from '@vueuse/core' +import { useElementSize, useRefHistory, useDark } from '@vueuse/core' import type { BoxSceneNode, CameraSceneNode, ConeSceneNode, SceneSettings, SphereSceneNode } from './types' @@ -25,6 +25,8 @@ const state = ref({ sceneSettings: { width: 800, height: 600 }, sceneNode const history = useRefHistory(state, { deep: true }) history.clear() +const isDark = useDark() + const currentCameraName = ref('nav') const currentCamera = computed(() => ({ render: renderCamRef, nav: navCamRef }[currentCameraName.value]?.value)) @@ -50,6 +52,7 @@ const cameraHelperRef = shallowRef() const canvasContainerRef = shallowRef() const sceneNodeRefs = ref<{ [sceneNodeId: string]: Object3D }>({}) +// Set cameras to manual during initialization. This runs only once as soon as refs are not null const setCamerasManualWatcher = watchEffect(() => { if (renderCamRef.value != null && navCamRef.value != null) { renderCamRef.value.manual = false @@ -58,6 +61,7 @@ const setCamerasManualWatcher = watchEffect(() => { } }) +// When switching current camera set it in the tres context watchEffect(() => { if (tresCanvasRef.value?.context != null && currentCamera.value != null) { const { setCameraActive } = tresCanvasRef.value.context @@ -65,6 +69,7 @@ watchEffect(() => { } }) +// when render cam is active, update manually what is required. CameraHelper has to be manually update when aspect/fov changes watchEffect(() => { if (renderCamRef.value != null) { renderCamRef.value.aspect = state.value.sceneSettings.width / state.value.sceneSettings.height @@ -76,6 +81,7 @@ watchEffect(() => { } }) +// when nav cam is active, update manually what is required const canvasContainerSize = useElementSize(canvasContainerRef) watchEffect(() => { if (navCamRef.value != null) { @@ -279,7 +285,7 @@ function handleDeleteSceneNode(sceneNodeId: string) { {{ sceneNode.type }} -